【问题标题】:Empty/Null values from post request are getting assigned to 0来自发布请求的空/空值被分配给 0
【发布时间】:2023-03-23 01:05:01
【问题描述】:
<student>
<id>1</id>
<badge></badge>
<name>Matt</name>
</student>

这是我在发帖时观察到的 xml 帖子。

public class Student implements Serializable{

Long id;
Integer badge;
String name;
}

我的网络服务:

    @Path("add")
    @POST
    @Consumes({Mediatype.xml,Mediatype.json})
    @Produces({Mediatype.xml,Mediatype.json})
    public Response add(Student student)
    {
    }

当我在我的服务层上调试这个添加方法时,变量徽章被赋值为“0”,即使它不是由 GUI 提供的。徽章的数据库字段也是整数(postgres)。

它是否与整数变量有关,如果不存在则将默认值分配给 0 ?

【问题讨论】:

  • 不,Integer 是引用类型。默认情况下,对象创建将分配变量null。这是来自您的解组器的行为,可能是 JAXB。
  • 您是否使用 JAXB 进行解组?
  • 我正在使用 Jersey 实现

标签: java web-services jersey


【解决方案1】:

Integer 类型是一个引用类型。当您使用引用类型的变量创建类的实例时,它的默认值为null。所以你看到的行为不是 Java 的。

Jersey 使用 JAXB 编组和解组您的实体。当它看到您有一个具有空文本元素的badge 字段时,它必须决定要设置的正确值是什么。给它null 是没有意义的,因为那里有一个元素。所以它决定将其初始化为0

【讨论】:

  • 我正在使用 jersey 的实现
  • @ChetanD Jersey 的实现是什么?
  • 通过分配 nillable=true 也将 0 分配给空值
  • @ChetanD 我不明白你刚才说什么。请改写。
  • 我看到了 stackoverflow.com/questions/858598/… 并做了 nillable=false 所以它不应该将 null 分配给 0 ,但它没有按规定工作
猜你喜欢
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2016-03-19
相关资源
最近更新 更多