本文将分享jackson-不输出null的字段的详细内容,并且还将对jacksonnull配置成空字符串进行详尽解释,此外,我们还将为大家带来关于alibaba.fastjson允许输出NULL并且把
本文将分享jackson- 不输出null 的字段的详细内容,并且还将对jackson null配置成空字符串进行详尽解释,此外,我们还将为大家带来关于alibaba.fastjson允许输出NULL并且把字符串输出为“”、fastjson序列化时不输出值为null的字段、Float为null时,Jackson(JSON)抛出JsonMappingException、Jackson 与 SpringBoot 的实现:获取请求中存在的字段名称以及相应的字段映射的相关知识,希望对你有所帮助。
本文目录一览:- jackson- 不输出null 的字段(jackson null配置成空字符串)
- alibaba.fastjson允许输出NULL并且把字符串输出为“”
- fastjson序列化时不输出值为null的字段
- Float为null时,Jackson(JSON)抛出JsonMappingException
- Jackson 与 SpringBoot 的实现:获取请求中存在的字段名称以及相应的字段映射
jackson- 不输出null 的字段(jackson null配置成空字符串)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AntUiTreeNode {
}
alibaba.fastjson允许输出NULL并且把字符串输出为“”
使用JSON.toJSONString(str,SerializerFeature... serial);
SerializerFeature
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],51);">WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,255);">
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; public class JavaToJson { public static void main(String[] args) { Class<?> c; Object o; try { c = Class.forName("com.free.User"); o = c.newInstance(); String json = JSON.toJSONString(o,SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty); System.out.println(json); } catch (Exception e) { } } }
fastjson序列化时不输出值为null的字段
Map < String , Object > jsonMap = new HashMap< String , Object>();
jsonMap.put("a",1);
jsonMap.put("b","");
jsonMap.put("c",null);
jsonMap.put("d","wuzhuti.cn");
String str = JSONObject.toJSONString(jsonMap);
System.out.println(str);
//输出结果:{"a":1,"b":"",d:"wuzhuti.cn"}
从输出结果可以看出,null对应的key已经被过滤掉;这明显不是我们想要的结果,这时我们就需要用到fastjson的SerializerFeature序列化属性
也就是这个方法:JSONObject.toJSONString(Object object, SerializerFeature... features)
SerializerFeature有用的一些枚举值
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
现在加上
Map < String , Object > jsonMap = new HashMap< String , Object>();
jsonMap.put("a",1);
jsonMap.put("b","");
jsonMap.put("c",null);
jsonMap.put("d","wuzhuti.cn");
String str = JSONObject.toJSONString(jsonMap,SerializerFeature.WriteMapNullValue);
System.out.println(str);
//输出结果:{"a":1,"b":"","c":null,"d":"wuzhuti.cn"}
Float为null时,Jackson(JSON)抛出JsonMappingException
我正在使用Spring(与Jackson一起)和jQuery来将表单作为对象传递。我的pojo包含可为空的浮点数。但是,当字段为空时,Jackson会抛出Exeption:
org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.lang.Float from String value '''': not a valid double value
为了允许空值(或表单字段中的空值),我该怎么办?
谢谢Er
答案1
小编典典默认情况下,Jackson确实仅将显式JSON
null视为空值。但是,如果需要从空String强制为null,则添加功能请求很容易。实际上,这听起来像是一个不错的改进-
这是开源项目经常基于用户对他们认为应该存在的东西,事物应该如何工作的要求而得到改进的方式。
在短期内,您还可以注册接受空String并产生null的自定义反序列化器(尽管不是指南,http:
//wiki.fasterxml.com/JacksonHowToCustomDeserializers会介绍一些相关信息)。
Jackson 与 SpringBoot 的实现:获取请求中存在的字段名称以及相应的字段映射
如何解决Jackson 与 SpringBoot 的实现:获取请求中存在的字段名称以及相应的字段映射?
我有一个要求,在如下不同的情况下抛出不同的错误,并且有很多这样的字段,而不仅仅是 1。
例如
-
{ "id": 1,"name": "nameWithSpecialChar$" }
这里应该为特殊字符抛出错误。
-
{ "id": 1,"name": null }
这里抛出字段空错误。
-
{ "id": 1 }
这里抛出字段缺失错误。
处理,第 1 和第 2 种情况很容易,但对于第 3 种情况,有什么方法可以让我们在使用 Jackson 进行序列化时在输入 json 中传递的字段名称列表?
一种方法,我可以通过将请求映射到 JsonNode 来实现,然后检查节点是否存在所需字段,然后手动反序列化该 JsonNode,然后验证其余成员,如下所示。
public ResponseEntity myGetRequest(@RequestBody JsonNode requestJsonNode) {
if(!requestJsonNode.has("name")){
throw some error;
}
MyRequest request = ObjectMapper.convertValue(requestJsonNode,MyRequest .class);
validateIfFieldsAreInvalid(request);
但是我不喜欢这种方法,有没有其他方法可以做到?
解决方法
您可以定义一个 JSON schema 并根据它验证您的对象。在您的示例中,您的架构可能如下所示:
{
"$schema": "https://json-schema.org/draft/2020-12/schema","type": "object","properties": {
"id": {
"description": "The identifier","type": "integer"
},"name": {
"description": "The item name","type": "string","pattern": "^[a-zA-Z]*$"
}
},"required": [ "id","name" ]
}
要验证您的对象,您可以使用 json-schema-validator 库。这个库建立在杰克逊之上。由于您无论如何都在使用 Spring Boot,因此您已经导入了 Jackson。
示例代码大致如下:
String schema = "<define your schema here>";
String data = "<put your data here>";
JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
ObjectMapper m = new ObjectMapper();
JsonSchema jsonSchema = factory.getJsonSchema(m.readTree(schema));
JsonNode json = m.readTree(data);
ProcessingReport report = jsonSchema.validate(json);
System.out.println(report);
报告包含不同输入案例的详细错误。例如,有了这个输入
{
"id": 1,"name": "nameWithSpecialChar$"
}
这个输出被打印出来
--- BEGIN MESSAGES ---
error: ECMA 262 regex "^[a-zA-Z]*$" does not match input string "nameWithSpecialChar$"
level: "error"
schema: {"loadingURI":"#","pointer":"/properties/name"}
instance: {"pointer":"/name"}
domain: "validation"
keyword: "pattern"
regex: "^[a-zA-Z]*$"
string: "nameWithSpecialChar$"
--- END MESSAGES ---
或者不只是打印报告,您可以遍历所有错误并拥有您的特定逻辑
for (ProcessingMessage message : report) {
// Add your logic here
}
您可以查看 example code 以获取有关如何使用图书馆的更多信息。
我们今天的关于jackson- 不输出null 的字段和jackson null配置成空字符串的分享就到这里,谢谢您的阅读,如果想了解更多关于alibaba.fastjson允许输出NULL并且把字符串输出为“”、fastjson序列化时不输出值为null的字段、Float为null时,Jackson(JSON)抛出JsonMappingException、Jackson 与 SpringBoot 的实现:获取请求中存在的字段名称以及相应的字段映射的相关信息,可以在本站进行搜索。
本文标签: