Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6266561
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: Java

2017-03-08 06:32:07

一直使用jackson处理json,最近ui传来的数据{"funcCode":"Read_Coils","action":"pass","startaddr":"","endaddr":""},处理时需要把""转为null,
看了许久才明白其中的道理.
先写一个自定义反序列化类

点击(此处)折叠或打开

  1. import com.fasterxml.jackson.core.JsonParser;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.DeserializationContext;
  4. import com.fasterxml.jackson.databind.JsonDeserializer;
  5. import com.fasterxml.jackson.databind.JsonNode;

  6. import java.io.IOException;

  7. /**
  8.  * Created by li on 2/17/17.
  9.  */
  10. class CustomDeserializer extends JsonDeserializer<String> {

  11.     @Override
  12.     public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
  13.         JsonNode node = jsonParser.readValueAsTree();
  14.         if (node.asText().isEmpty()) {
  15.             return null;
  16.         }
  17.         return node.toString();
  18.     }

  19. }
然后在POJO类需要转换的字段加注解

点击(此处)折叠或打开

  1. private String action;
  2.     @JsonDeserialize(using = CustomDeserializer.class)
  3.     private String startaddr;
  4.     @JsonDeserialize(using = CustomDeserializer.class)
  5.     private String endaddr;
主要是引用
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

转换的代码


点击(此处)折叠或打开

  1. ObjectMapper mapper = new ObjectMapper();
  2.         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

  3. ModbusTcp modbusTcp = mapper.readValue(json, ModbusTcp.class);
导入库
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

注意是fastxml不是codehua,否则不起作用


阅读(6657) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~