我有一个简单的pojo:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StatusPojo {
private String status;
}
当我反序列化简单字符串“asd”(不带引号)时,如下所示:
StatusPojo pojo = new ObjectMapper().readValue("asd", StatusPojo.class)
我成功地创建了一个statuspojo对象,status字段的值为“asd”,尽管它不是有效的json,也没有提到字段名“status”。
为什么它的行为是这样的,如何禁用此行为并让对象Map程序抛出异常?
1条答案
按热度按时间6yt4nkrj1#
你的pojo有
@AllArgsConstructor
(也许是因为@Builder
)然后会产生这样的结果:当objectmapper然后反序列化普通字符串时,它使用该构造函数来创建对象。
如果您在pojo中添加了其他属性,例如:
会有一个例外,因为objectmapper找不到创建者,所以不会有上面提到的构造函数,而是有两个字符串参数。
快速闪光
DeserializationFeature
不具有这样的功能,即禁止对普通字符串使用一个字符串参数构造函数。玩更多的领域,删除
@Builder
&@AllArgsConstructor
可能会解决你的问题,但如果你不能改变这些可能没有其他的选择。