Spring Boot3 & Spring Framework 6 강의 ::Section.8 -REST API에서 유효성 검증하기

suragryen·2024년 3월 12일
0

Udemy-Spring

목록 보기
19/25
  1. 의존성 추가
코드를 입력하세요
  1. createUser에 파라미터로 @Valid 추가
	@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 반환하기 
	}

여러가지 유효성을 @어노테이션을 통해 적용할 수 있다

  • 테스트를 하기위해 size min을 2 이하로 줬다

  • 성공

사용자에게 에러 메세지 띄우기

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);
			
		}
  • ex.getFieldError().getDefaultMessage(), 로 바꿔줘서 첫번째 에러만 반환할 수 있게 바꿔준다.

에러 갯수 카운팅 하기

@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);
			
		}
profile
블로그 이사중 ☃︎

0개의 댓글

관련 채용 정보