当前位置: 首页 > 面试题库 >

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

司徒啸
2023-03-14
问题内容

我想在我的静态服务中捕获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异常。我想抓住这个例外。


问题答案:

最终对我有用的是声明的ExceptionMapper提供者JsonMappingException,例如

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();
    }
}


 类似资料:
  • 对于我的RESTAPI,我使用jersey和ExceptionMapper来捕获全局异常。我的应用程序抛出的所有异常都运行良好,但我无法捕获jackson抛出的异常。 例如,我的一个endpoint接受包含枚举的对象。如果请求中的Json有一个不在枚举jersey中的值,则抛出此异常 尽管我创造了这个映射器 代码永远不会到达这个映射器。 为了捕捉这些异常,我们需要做些什么吗? 编辑说明:我尝试过让

  • 问题内容: 我一直在尝试创建Jersey REST Web服务。我想从Java类接收和发出JSON对象,如下所示: 应该这样将其转换为JSON: 但是,我找不到为此的标准解决方案。似乎每个人都在实现自己的包装器 解决方案。这个要求对我来说似乎是最基本的。我不敢相信这是普遍接受的解决方案,尤其是因为Jersey确实是Java中更有趣的部分之一。 我还尝试了升级到Jackson 1.8,这仅给了我这一

  • 我和jackson一起绘制地图,我有点迷茫。我的Json具有以下结构 我确实找到了很多处理数组的教程,但我在第一个标记“d”时就已经失败了。而且根本不需要所有的“_元数据”标记。 我创建了一个包含lastName等属性和一个集合附件的pojo。但我的代码在标记“d”或“_元数据”时总是失败 还有杰克逊的读者 任何提示都将不胜感激。 问候马蒂亚斯

  • 首先,我对这个问题太长表示最诚挚的歉意,但老实说,我不知道如何缩短它,因为每个部分都是一个特例。诚然,我可能对此视而不见,因为我已经把头撞到墙上好几天了,我开始绝望了。 我向所有通读这本书的人表示最大的尊重和感谢。 我希望能够通过使用Jersey ExceptionMapers将Shiro的AuthenticationException及其子类映射到JAX-RS响应,Jersey例外映射器是使用G

  • 来自Facebook的JSON数据示例 运行上述文件将产生此错误。 我面临的问题是,如何将“1111111”值映射到类中的变量?如果我使用@JsonIgnoreProperties(ignoreUnknown=true),它将完全忽略所有的josn数据,因为第一个数据没有任何要映射的标记。我应该如何使用Jackson json将这种类型的json数据映射到Java?

  • 我使用JAVA jackson将JSON映射到JAVA pojo对象,我的JSON文件是: 在之后,我收到了以下错误消息: 不能反序列化出START_ARRAY令牌 我的POJO课程: 请问,这种JSON格式的正确java POJO是什么?谢谢