java - 响应不包含零整数

标签 java json rest jersey jackson

我有restful API并使用Jetty作为服务器。我发送一个发布请求来创建包含一些技能列表的对象。 Skill 包含 String idInteger value 字段。当我使用 0"0" 作为我的整数字段并获取响应时,我得到的技能数组根本没有 value 字段。

@XmlRootElement
@JsonAutoDetect(isGetterVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE,
        creatorVisibility = Visibility.NONE, fieldVisibility = Visibility.NONE)
public class Skill
{

    @com.fasterxml.jackson.annotation.JsonProperty(value="id")
    @javax.validation.constraints.NotNull
    private java.lang.String _id;

    @com.fasterxml.jackson.annotation.JsonProperty(value="value")
    @javax.validation.constraints.NotNull
    private java.lang.Integer _value;

    // getters and setters
}

我的请求正文是这样的:

{
  // some other fields
  "skills": [{
    "id":"Swedish",
    "value":0
  },{
    "id":"Finnish",
    "value":"0"
  }]
}

对我的对象进行必要的更改后,我将其传递给通过此行返回:

Response.ok().entity(myObject).build();

获取响应的正文如下:

{
  // some other fields
  "skills" : [ {
    "id" : "Finnish"
  }, {
    "id" : "Swedish"
  } ]
}

使用其他值一切正常,但是,0 似乎很特殊,它甚至不将该字段包含到对象中。

问题是为什么以及如何解决它?

最佳答案

问题不在于 Jetty、Jersey 或 YaaS。问题似乎出在 jackson 身上。 Jackson 进行了序列化/反序列化,并且似乎进行了一些优化,因此跳过了零。

不幸的是,我还没有找到任何资源来准确说明为什么要跳过 0,并且我没有设法在 Jackson 代码中找到发生这种情况的位置。

可能的解决方案:

  1. 为您的字段使用注释@JsonInclude(JsonInclude.Include.ALWAYS),它不会被跳过。
  2. Integer 字段不允许有零。
  3. 使用String类型而不是Integer

问题是我的对象是由 YaaS 生成的,因此,我不能只通过生成的对象进行更改,并且不确定 YaaS 是否有可能生成带有第 1 项注释的对象。我认为在这种情况下,2 个选项可能是最好的。

关于java - 响应不包含零整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36625457/

相关文章:

java if Action 并返回

java - 如何在启动时禁用 cq OOTB bundle /组件?

java - 从字符串中过滤掉 UTF-8 标点符号

javascript - 为什么我的 json 格式的 OBJ 没有长度

javascript - jquery 每个函数都无法按照我想要的方式工作

java - Swing:隐藏的 JPanel 添加的尺寸等于 0 时,在变为可见时不会重新计算

json - PhpStorm/WebStorm REST 客户端 : easy way to send JSON?

node.js - Node Restful 与 mongoose 4

json - 在 MATLAB 中从 REST Web 服务读取内容

api - 使用概念上可以包含其他资源的资源在Laravel 5.2中设计RESTful API