MethodArgumentNotValidException
및 ConstraintViolationException
을 처리하는 @ExceptionHandler
에 매핑을 넣을 수 있습니다. 다음은 전자의 예입니다. 음이 아닌 것으로
import javax.validation.constraints.Min;
public class Foo {
private int bar;
@Min(0)
public int getBar() {
return bar;
}
public void setBar(int bar) {
this.bar = bar;
}
}
bar
요구 :
개체
Foo
가정한다. 여기 컨트롤러가 있습니다.
{"foobar":"must be greater than or equal to 0"}
난 당신이 훨씬 더이 있으리라 믿고있어 : 데이터 { "bar":"-1" }
와 POST 전송
는
import internal.sandbox.domain.Foo;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;
@Controller
public class SomeController {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public Map<String,String> handleValidationFailure(MethodArgumentNotValidException e) {
Map<String, String> errors = new HashMap<>();
for (FieldError fieldError : e.getBindingResult().getFieldErrors()) {
errors.put(fieldError.getObjectName() + fieldError.getField(),
fieldError.getDefaultMessage());
}
return errors;
}
@RequestMapping(value = "/", method = RequestMethod.POST, consumes = "application/json")
public ResponseEntity<?> post(@Valid @RequestBody Foo foo) {
return new ResponseEntity<>(HttpStatus.OK);
}
}
다음과 같은 응답 본문과 404의 결과로 @ExceptionHandler
에 의해 처리되는 MethodArgumentNotValidException
를 던졌습니다 더 똑똑한 @ExceptionHandler
당신 물건을 더 잘 맵핑 할 수 있지만, 에있는 Set<ConstraintViolations>
필드처럼 예외는 필요한 모든 것을 가지고 있습니다. 이 시점에서 AngularJS 서비스는 POST를 한 $http
약속의 거부를 확인하고 오류 정보를 처리하는 현장의 날을 가질 수 있습니다.
최대 절전 모드에서 처리 된 ConstraintViolationException
과 비슷한 @ExceptionHandler
을 작성할 수 있습니다.
그래서 당신은 bean validator 프레임 워크를 사용하고 있습니까? [이와 비슷한 것] (http://jaxenter.com/integrating-bean-validation-with-jax-rs-48461.html)을 찾고 계십니까? –