helloworld
유효성 검사 (Validatation) 본문
우선 스프링부트가 업데이트 되면서 web-starter 에 validation에 관한 기능이 빠졌다고 한다.
나는 2.7~ 버전을 사용하기 때문에
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
디펜던시를 추가해주었다.
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private Date joinDate;
}
기존에 사용하던 user에 대한 dto라고 해야하나 vo라고 해야하나 (dto랑 vo는 맨날 헷갈린다 ㅠ)
암튼 이 파일에
@AllArgsConstructor
public class User {
private Integer id;
@Size(min = 2, message = "Name은 2글자 이상 입력해주세요")
private String name;
@Past
private Date joinDate;
}
@size 어노테이션을 활용하여 최소값을 정해주었다.
이 상태로 이름이 1글자로 된 데이터를 넣으려고 하면

400 에러가 난다.
하지만 언제 에러가 났는지 에러 원인은 뭔지 알고싶기에 exception 처리를 해야겠다.
예외처리를 할때 만든 java파일에 가서 상속받았던
ResponseEntityExceptionHandler에 커서를 두고 컨트롤+b 나 컨트롤+좌클릭을 하면 해당 클래스를 확인할 수 있다..
수많은 메서드중에
handleMethodArgumentNotVaild 라는 메서드를 복사해와
내 클래스에 넣었다
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "Validation Failed",
ex.getBindingResult().toString());
return new ResponseEntity(exceptionResponse, HttpStatus.BAD_REQUEST);
}
부모요소에서 가져온 코드이기 때문에
@Override 어노테이션을 추가했다.
추가를 안해도 문법적인 에러는 안나지만 메서드 이름이 바뀌는 등의 변화가 생기면
컴파일 에러가 나기 때문에 어노테이션을 추가하면 더욱 용이하다.
@AllArgsConstructor //모든 매개변수가 있는 생성자
@NoArgsConstructor// 기본 생성자
public class ExceptionResponse {
private Date timestamp;
private String message;
private String details;
}
위는 이해를 돕기 위한 ExcetionResponse 클래스다.
에러가 찍힌 시간, 메시지, 디테일한 설명을 담기위해 만들었다.
원래는
"Validation Failed"가 아닌 ex.getMessage()를 넣었으나 BindingResult와 내용이 같아서
유효성 실패라는 문구만 넣어 주었다.
리턴시에 http상태코드인 badrequest를 넣었다
결과--
휴
'restful' 카테고리의 다른 글
| 데이터 필터링 (0) | 2023.08.13 |
|---|---|
| JSON 형태의 데이터를 xml 데이터로 변환하기 (0) | 2023.08.13 |
| PUT (0) | 2023.08.13 |
| DELETE 기능 (0) | 2023.08.13 |
| Exception 처리 심화과정 .. (0) | 2023.08.13 |