Skip to content

Commit 69ef1a5

Browse files
committed
Added ControllerUtils. Fixed EmployeeController and Employee entity.
1 parent b13cd78 commit 69ef1a5

File tree

5 files changed

+86
-28
lines changed

5 files changed

+86
-28
lines changed

pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@
4848
<artifactId>lombok</artifactId>
4949
<optional>true</optional>
5050
</dependency>
51+
52+
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
53+
<dependency>
54+
<groupId>javax.validation</groupId>
55+
<artifactId>validation-api</artifactId>
56+
<version>2.0.1.Final</version>
57+
</dependency>
58+
59+
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
60+
<dependency>
61+
<groupId>org.hibernate</groupId>
62+
<artifactId>hibernate-validator</artifactId>
63+
<version>6.1.6.Final</version>
64+
</dependency>
65+
66+
5167
<dependency>
5268
<groupId>org.springframework.boot</groupId>
5369
<artifactId>spring-boot-starter-test</artifactId>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.gmail.merikbest2015.springbootreactjscrudapp.controller;
2+
3+
import org.springframework.validation.BindingResult;
4+
import org.springframework.validation.FieldError;
5+
6+
import java.util.Map;
7+
import java.util.stream.Collector;
8+
import java.util.stream.Collectors;
9+
10+
public class ControllerUtils {
11+
static Map<String, String> getErrors(BindingResult bindingResult) {
12+
Collector<FieldError, ?, Map<String, String>> collector = Collectors.toMap(
13+
fieldError -> fieldError.getField() + "Error",
14+
FieldError::getDefaultMessage
15+
);
16+
return bindingResult.getFieldErrors().stream().collect(collector);
17+
}
18+
}

src/main/java/com/gmail/merikbest2015/springbootreactjscrudapp/controller/EmployeeController.java

Lines changed: 44 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
import com.gmail.merikbest2015.springbootreactjscrudapp.model.Employee;
55
import com.gmail.merikbest2015.springbootreactjscrudapp.service.EmployeeService;
66
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.http.HttpStatus;
78
import org.springframework.http.ResponseEntity;
9+
import org.springframework.validation.BindingResult;
810
import org.springframework.web.bind.annotation.*;
911

12+
import javax.validation.Valid;
1013
import java.util.HashMap;
1114
import java.util.List;
1215
import java.util.Map;
@@ -24,37 +27,57 @@ public EmployeeController(EmployeeService employeeService) {
2427
}
2528

2629
@GetMapping("/employees")
27-
public List<Employee> getAllEmployees() {
28-
return employeeService.findAll();
30+
public ResponseEntity<?> getAllEmployees() {
31+
List<Employee> employees = employeeService.findAll();
32+
33+
return new ResponseEntity<>(employees, HttpStatus.OK);
2934
}
3035

3136
@PostMapping("/employees")
32-
public Employee createEmployee(@RequestBody Employee employee) {
33-
return employeeService.save(employee);
37+
public ResponseEntity<?> createEmployee(@RequestBody @Valid Employee employee, BindingResult bindingResult) {
38+
if (bindingResult.hasErrors()) {
39+
Map<String, String> errorsMap = ControllerUtils.getErrors(bindingResult);
40+
41+
return new ResponseEntity<>(errorsMap, HttpStatus.BAD_REQUEST);
42+
} else {
43+
Employee savedEmployee = employeeService.save(employee);
44+
45+
return new ResponseEntity<>(savedEmployee, HttpStatus.CREATED);
46+
}
3447
}
3548

3649
@GetMapping("/employees/{id}")
37-
public ResponseEntity<Employee> getEmployeeById(@PathVariable Long id) {
50+
public ResponseEntity<?> getEmployeeById(@PathVariable Long id) {
3851
Employee employee = employeeService.findById(id)
3952
.orElseThrow(() -> new ResourceNotFoundException("Employee not exist with id: " + id));
4053

41-
return ResponseEntity.ok(employee);
54+
return new ResponseEntity<>(employee, HttpStatus.OK);
4255
}
4356

4457
@PutMapping("/employees/{id}")
45-
public ResponseEntity<Employee> updateEmployee(@PathVariable Long id, @RequestBody Employee employeeDetails) {
46-
Employee employee = employeeService.findById(id)
47-
.orElseThrow(() -> new ResourceNotFoundException("Employee not exist with id: " + id));
48-
49-
employee.setFirstName(employeeDetails.getFirstName());
50-
employee.setLastName(employeeDetails.getLastName());
51-
employee.setCity(employeeDetails.getCity());
52-
employee.setAddress(employeeDetails.getAddress());
53-
employee.setTelephone(employeeDetails.getTelephone());
54-
55-
Employee updatedEmployee = employeeService.save(employee);
56-
57-
return ResponseEntity.ok(updatedEmployee);
58+
public ResponseEntity<?> updateEmployee(
59+
@PathVariable Long id,
60+
@RequestBody @Valid Employee employeeDetails,
61+
BindingResult bindingResult
62+
) {
63+
if (bindingResult.hasErrors()) {
64+
Map<String, String> errorsMap = ControllerUtils.getErrors(bindingResult);
65+
66+
return new ResponseEntity<>(errorsMap, HttpStatus.BAD_REQUEST);
67+
} else {
68+
Employee employee = employeeService.findById(id)
69+
.orElseThrow(() -> new ResourceNotFoundException("Employee not exist with id: " + id));
70+
71+
employee.setFirstName(employeeDetails.getFirstName());
72+
employee.setLastName(employeeDetails.getLastName());
73+
employee.setCity(employeeDetails.getCity());
74+
employee.setAddress(employeeDetails.getAddress());
75+
employee.setTelephone(employeeDetails.getTelephone());
76+
77+
employeeService.save(employee);
78+
79+
return new ResponseEntity<>(HttpStatus.OK);
80+
}
5881
}
5982

6083
@DeleteMapping("/employees/{id}")
@@ -66,6 +89,7 @@ public ResponseEntity<Map<String, Boolean>> deleteEmployee(@PathVariable Long id
6689
Map<String, Boolean> response = new HashMap<>();
6790
response.put("deleted", Boolean.TRUE);
6891

69-
return ResponseEntity.ok(response);
92+
return new ResponseEntity<>(response, HttpStatus.NO_CONTENT);
93+
// return ResponseEntity.ok(response);
7094
}
7195
}

src/main/java/com/gmail/merikbest2015/springbootreactjscrudapp/model/Employee.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,32 @@
22

33
import lombok.Data;
44
import lombok.NoArgsConstructor;
5-
import lombok.NonNull;
65
import lombok.RequiredArgsConstructor;
76

87
import javax.persistence.*;
8+
import javax.validation.constraints.NotBlank;
99

1010
@Entity
1111
@Table(name = "employees")
1212
@Data
1313
@NoArgsConstructor
14-
@RequiredArgsConstructor
1514
public class Employee {
1615
@Id
1716
@GeneratedValue(strategy = GenerationType.IDENTITY)
1817
private Long id;
19-
@NonNull
18+
@NotBlank(message = "Empty field!")
2019
@Column(name = "first_name")
2120
private String firstName;
22-
@NonNull
21+
@NotBlank(message = "Empty field!")
2322
@Column(name = "last_name")
2423
private String lastName;
25-
@NonNull
24+
@NotBlank(message = "Empty field!")
2625
@Column(name = "city")
2726
private String city;
28-
@NonNull
27+
@NotBlank(message = "Empty field!")
2928
@Column(name = "address")
3029
private String address;
31-
@NonNull
30+
@NotBlank(message = "Empty field!")
3231
@Column(name = "telephone")
3332
private String telephone;
3433
}

src/main/resources/application.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ spring.datasource.username=root
33
spring.datasource.password=root
44
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
55
spring.jpa.hibernate.ddl-auto=validate
6-
spring.jpa.generate-ddl=false
6+
spring.jpa.generate-ddl=false
7+
spring.flyway.locations=classpath:/db/migration

0 commit comments

Comments
 (0)