Spring MethodArgumentNotValidException (@Valid 예외처리)

Brant Hwang
QueryPie
Published in
3 min readSep 8, 2016

@Valid 애너테이션으로 데이터를 검증하고, 해당 데이터에 에러가 있을 경우 예외 메세지를 JSON으로 처리하는 ExceptionHandler 처리 방법입니다.

1. 검증할 필드에 Annotation을 추가합니다.

...@Id
@Column(name = "COMP_CD", length = 100, nullable = false)
@Comment(value = "회사 코드")
@NotNull(message = "회사코드를 입력하세요")
private String compCd;
@Column(name = "COMP_NM", length = 50, nullable = false)
@Comment(value = "회사명")
@NotNull(message = "회사명을 입력하세요")
@Max(value = 50, message = "회사명을 50자리 이하로 입력하세요")
private String compNm;
...2. 컨트롤러에 @Valid 애너테이션을 추가합니다....public class CompanyController extends BaseController {@Inject
private CompanyService companyService;
@RequestMapping(method = {RequestMethod.PUT}, produces = APPLICATION_JSON)
public Company save(@Valid @RequestBody Company request) {
companyService.saveCompany(request);
return request;
}
...
}
3. MethodArgumentNotValidException ExceptionHandler를 추가합니다.( SuperClass나, ControllerAdvice 에 추가 합니다.)@ExceptionHandler(MethodArgumentNotValidException.class)
public Object processValidationError(MethodArgumentNotValidException ex) {
return ApiResponse.error(ApiStatus.SYSTEM_ERROR, ex.getBindingResult().getAllErrors().get(0).getDefaultMessage());
}
4. Validation이 실패하면 JSON으로 다음과 같이 응답합니다.
screen-shot-2016-09-08-at-7-01-44-pm

--

--