2014-06-24 1 views
1

하나의 작업으로 끝점이 있습니다 : doSomething. 이 작업에서는 "DoSomethingRequest"클래스의 인스턴스에 매핑되는 "application/json"콘텐츠 형식을 사용할 수 있습니다.ConstraintValidationException이 발생하면 Jersey의 엔티티 컨텐츠를 로깅하는 방법은 무엇입니까?

"DoSomethingRequest"클래스는 표준 유효성 검사를 사용하여 매개 변수의 잘못된 조합을 금지하며 완벽하게 작동합니다.

이제 거친 부분. 이 더러운 작업을 수행하는 것은 유효성 검사 프레임 워크이므로, 내 엔드 포인트 코드가 호출되지 않을 때 그러한 나쁜 요청의 내용을 어떻게 기록합니까?

답변

1

로그 수준을 변경하면 효과가 있지만 부작용으로 인해 많은 관련성이없는 로그가 표시됩니다. 사용 된 로그 수준은 FINER 인 것 같습니다. 또한 https://github.com/jersey/jersey/blob/master/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationExceptionMapper.java

또한 기록 방법을 제어하지 않았을 수도 있습니다. IMO보다 나은 방법은 ConstraintViolationException에 대해 사용자 정의 ExceptionMapper을 쓰는 것입니다. 또한 http://blog.dejavu.sk/2014/01/28/handling-jax-rs-and-bean-validation-errors-with-mvc/#bv-errors

+0

예, 생산에서 FINER 모드를 사용하는 것은 약간 미친 것입니다. 우리는 이미 적절한 예외 매퍼를 가지고 있지만, 엔드 포인트로 보내지는 원본 JSON 전체를 덤프하고 싶습니다. 실행 가능하지 않은 것처럼 보입니다. 대신 ConstraintViolationException 및 ConstraintViolation에서 기록 된 정보량이 증가했습니다. 이제는 ConstraintViolation.getMessage()뿐만 아니라 ConstraintViolation.getInvalidObject()도 기록합니다. 그것은 트릭을해야합니다 :) –