我有一个简单的POJO:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StatusPojo {
private String status;
}
当我对简单字符串"进行反序列化时;asd";(无引号(如下:
StatusPojo pojo = new ObjectMapper().readValue("asd", StatusPojo.class)
我正在成功创建一个StatusPojo对象,状态字段的值为";asd";,尽管它不是有效的JSON,并且没有任何地方具有字段名称";"状态";同时提到。
为什么它会这样做,以及如何禁用这种行为并让对象映射器抛出异常?
您的POJO有@AllArgsConstructor
(可能是因为@Builder
(,然后它会生成这样的东西:
public StatusPojo(String status) {
this.status = status;
}
当ObjectMapper反序列化纯字符串时,它会使用该构造函数来创建对象。
如果你在pojo中添加了一些其他属性,比如:
private String noAsdPlease;
会有一个例外,因为ObjectMapper找不到创建者,所以不会有上面提到的构造函数,而是有两个String参数。
在快速glace中,DeserializationFeature
没有这样一个功能,即禁止为纯字符串使用一个字符串arg构造函数。
玩更多的领域,删除@Builder
&@AllArgsConstructor
可能会解决你的问题,但如果你不能改变这些,可能就没有其他选择了。