2015-01-30 2 views
16

입력 json이 유효하지 않은 경우를 대비해 json 매핑 예외를 잡기를 원합니다.저지/잭슨 : json 매핑 예외를 잡는 방법?

그것은 org.codehaus.jackson.map.JsonMappingException을 던졌습니다. 그러나 나는이 예외를 잡는 방법이나 장소를 알지 못합니다. 이 예외를 잡아 적절한 오류 응답을 다시 보내고 싶습니다.

@JsonInclude(JsonInclude.Include.NON_NULL) 
@Generated("org.jsonschema2pojo") 
@JsonPropertyOrder({ 
     "name", 
     "id" 
}) 
public class Customer { 
    @JsonProperty("name") 
    private String name; 

    @JsonProperty("id") 
    private String id; 
    <setter/getter code> 
} 

public class MyService { 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public final Response createCustomer(@Context HttpHeaders headers, 
      Customer customer) { 
     System.out.println("Customer data: " + customer.toString()); 
     return Response.ok("customer created").build(); 
    } 
} 

모든 것이 잘 작동하지만 JSON 본체 그럼 형성되지 않는 경우는 JsonMappingException 예외가 발생합니다. 이 예외를 catch하고 싶습니다. 나를 JsonMappingException에 대한 ExceptionMapper 제공자를 선언했습니다 위해 마지막으로 일을 무엇

+0

항목 : https://java.net/jira/browse/JERSEY-2722 –

답변

17

, 같은

같은
import org.codehaus.jackson.map.JsonMappingException; 
import org.springframework.stereotype.Component; 

import javax.ws.rs.core.Response; 
import javax.ws.rs.ext.ExceptionMapper; 
import javax.ws.rs.ext.Provider; 

@Component 
@Provider 
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> { 
    @Override 
    public Response toResponse(JsonMappingException exception) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } 
} 
+0

이 방법을 좋아 보인다, 하지만 어디에서 던져서이 예외를 잡아서 JsonMappingExceptionMapper에서 적절한 응답을 다시 보낼 수 있습니다. toResponse(). JsonMappingExceptionMapper를 구현 한 예와 같지만 toResponse 메서드를 호출하지 않습니다. JsonMappingException을 throw하지만이를 catch 할 수 없습니다. 어떤 생각을 어디서 어떻게 잡을 수 있습니까? – Neel

+0

예, POST 본문이'Customer' 객체로 비 직렬화되지 않으면 Jersey에 의해 처리됩니다. Jersey 응용 프로그램에서 'JsonMappingExceptionMapper'를 등록했는지 확인하십시오. 제 경우에는 Spring 구성 요소 통합을 통해 등록하고 있습니다. –