Jersey/Jackson:如何捕获 json 映射异常?异常、Jersey、Jackson、json

由网友(人丑嘴不甜长得寒碜还没钱)分享简介:我想在我的 restful 服务中捕获 json 映射异常,以防输入 json 无效.I would like to catch json mapping exception in my restful service in case input json is not valid. 它抛出 org.codehau...

我想在我的 restful 服务中捕获 json 映射异常,以防输入 json 无效.

I would like to catch json mapping exception in my restful service in case input json is not valid.

它抛出 org.codehaus.jackson.map.JsonMappingException,但我不知道如何或在哪里捕获此异常.我想捕获这个异常并发送回适当的错误响应.

It throws org.codehaus.jackson.map.JsonMappingException, but I don't how to or where to catch this exception. I want to catch this exception and send back appropriate error response.

@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 异常.我想捕捉这个异常.

Everything works fine, but if json body is not well formed then it throws JsonMappingException exception. I want to catch this exception.

推荐答案

最终对我有用的是为 JsonMappingException 声明一个 ExceptionMapper 提供程序,例如

What finally worked for me was to declare an ExceptionMapper provider for JsonMappingException, such as

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();
    }
}
阅读全文

相关推荐

最新文章