源码先锋

源码先锋

@JsonProperty()字段修改成想要,json字符串和list集合相互转换

admin 161 152
一、前言

小编今天遇到一个需求,是一个表中有个字段是存放json字符串的,为了减少json字符串的长度,我们里面的实体类字段存储使用第一个字母来,这样数据库的字段大小就可以节省很多。

通俗地说一下哈:
就是实体类上的名字为model、data、time,我们在保存到json字符串中为m、d、t。
别着急,小编接着解释需求哈!!

二、转化前后展示

原来的这样,比较占字段!

[{"username":"wang","password":"123"}]

优化后:

[{"u":"wang","p":"123"}]

现在大家明白了吧!!

小编使用jackson的@JsonProperty()来解决这个问题,使用之后,带来了json字符串和list集合要相互转化,因为要新增和修改!

三、@JsonProperty()使用

@JsonProperty()作用:在序列号和反序列化时使用,作用于实体类的属性上,作用是把该属性的名称序列化成自己想要的名称。

json实体类:

;;@DatapublicclassJson{@JsonProperty("u")privateStringusername;@JsonProperty("p")privateStringpassword;}

保存数据库的实体类:

@DatapublicclassTestimplementsSerializable{privatestaticfinallongserialVersionUID=337361630075002456L;@TableId(type=_ID)privatelongid;privateStringname;privateStringger;privateStringdata;privateLocalDateTimecreateDate;privateLocalDateTimeupdateDate;}

下面我们转json就可以保存到数据库了,转json的时候就会按照我们写的u和p进行保存的!

四、json字符串和list集合相互转化

小编为了省事直接在controller进行测试了哈!!

@RestController@RequestMapping("/test")@Slf4j@RequiredArgsConstructorpublicclassTestController{privatefinalTestServicetestService;@NonNullprivateTestMappertestMapper;@GetMapping("/update")publicResultupdate()throwsJsonProcessingException{ListJsonjsonList=newArrayList();Jsonjson=newJson();("123");("wang");(json);Jsonjson1=newJson();("456");("zhang");(json1);//list转jsonStringjsonString=newObjectMapper().writeValueAsString(jsonList);Testtest=newTest();("小米");(100);(jsonString);(test);//json转listListJsonlist=newObjectMapper().readValue(jsonString,newTypeReferenceListJson(){});(list);("成功");}}

如果对@RequiredArgsConstructor不了解的可以看一下小编的这篇文章!还在使用@Autowrired注入?不妨试试@RequiredArgsConstructor注解完美替代_掉发的小王的博客-CSDN博客

五、测试展示

下图可以看到我们在保存到数据库的时候,转完json后已经是u和p了。
我们在把json字符串转list集合时,他自动帮我们转化为实体类本来的样子了!是不是干净又卫生啊!!
不过使用会有异常,我们可以trycatch就可以了!!


我们再看一下数据库里保存的:

六、总结


有缘人才可以看得到的哦!!!

小王博客站