코드를 입력하세요
@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody User user) { //웹 요청을 보낼 때 요청 본문을 보냄 .
//사용자가 생성되면 201을 반환하게 한 후 생성된 리소스의 location 값을 응답값 헤더에 넣어서 반환.
User savedUser = service.save(user);
// /users/4 => /users /{id}, user.getID
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("{/id}") //요청에 추가하고싶은
.buildAndExpand(savedUser.getId()) //변수를({/id}) 생성된 사용자의 아이디로 바꿔줌
.toUri(); //Url 로 변환하고 반환
return ResponseEntity.created(location).build();
// /user/id ->url 반환하기
}
여러가지 유효성을 @어노테이션을 통해 적용할 수 있다
CustomizedResponseEntityExceptionHandler.java
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(LocalDate.now(),
ex.getMessage(), request.getDescription(false));
return new ResponseEntity(errorDetails,HttpStatus.BAD_REQUEST);
}
Users.java
@Size(min=2, message= "Name should have atleast 2 characters")
private String name;
@Past(message = "birth date should be in the past")
private LocalDate birthDate;
너무 긴 오류 메세지가 나가기 때문에 message를 지정해준다
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(LocalDate.now(),
ex.getFieldError().getDefaultMessage(), request.getDescription(false));
ex.getFieldError().getDefaultMessage()
return new ResponseEntity(errorDetails,HttpStatus.BAD_REQUEST);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(LocalDate.now(),
"Total Error : "+ex.getErrorCount()+"First Error:" +ex.getFieldError().getDefaultMessage(), request.getDescription(false));
return new ResponseEntity(errorDetails,HttpStatus.BAD_REQUEST);
}