一个空的JSON字段在Java模型中是一个布尔值/可为null的字段,正在转换为null
我有一个特别的要求,在一个空的JSON字段在Java模型中是一个布尔值/可为null的字段,正在转换为null,java,json,jackson,deserialization,json-deserialization,Java,Json,Jackson,Deserialization,Json Deserialization,我有一个特别的要求,在 如果请求JSON正文中没有(布尔类型)字段,则该请求有效 如果此字段设置为布尔值(true或false),则它显然有效 如果字段具有非布尔值,则应引发异常 如果该字段的值为空,它应该抛出异常 即使Java模型在字段通过类型检查为非布尔值时抛出异常,空值也被转换为null。相反,我需要能够区分它并抛出异常。如何才能做到这一点 下面是我如何定义post body模型的,我使用的是AutoValue生成器,因此对于手工编写的字段,我没有setter函数。此外,我正在使用fa
- 如果请求
正文中没有(布尔类型)字段,则该请求有效李>JSON
- 如果此字段设置为布尔值(
或true
),则它显然有效李>false
- 如果字段具有非布尔值,则应引发异常
- 如果该字段的值为空,它应该抛出异常
Java
模型在字段通过类型检查为非布尔值时抛出异常,空值也被转换为null。相反,我需要能够区分它并抛出异常。如何才能做到这一点
下面是我如何定义post body模型的,我使用的是AutoValue生成器,因此对于手工编写的字段,我没有setter函数。此外,我正在使用fasterxml库
@JsonProperty("indicator")
@Nullable
public abstract Boolean getIndicator();
我尝试定义一个自定义注释并编写逻辑来检查值是否为空,但没有成功。您需要禁用允许在类似情况下强制的功能。请参见以下示例:
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonApp {
public static void main(String[] args) throws Exception {
String json = "{\"indicator\":\"\"}";
ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.ALLOW_COERCION_OF_SCALARS);
System.out.println(mapper.readValue(json, BaseClass.class));
}
}
class BaseClass {
private Boolean indicator;
public Boolean getIndicator() {
return indicator;
}
public void setIndicator(Boolean indicator) {
this.indicator = indicator;
}
@Override
public String toString() {
return "BaseClass{" +
"indicator=" + indicator +
'}';
}
}
以上代码打印:
线程“main”中出现异常
com.fasterxml.jackson.databind.exc.MismatchedInputException:无法
将类型java.lang.Boolean
(启用MapperFeature.允许对\u标量进行强制\u
[来源:(字符串)“{”指示符“:”};行:1,列:14](通过)
参考链:基类[“指标”])
将空值视为null是您正在使用的JSON解析器的一个特性。由于我们不知道您使用的是哪种JSON解析器,因此我们无法真正帮助您找出如何重新配置它,使其不将空视为空,现在可以吗?@Andreas,感谢您的回复。我使用fasterxml库作为JSON解析器