使用jackson的@JsonProperty()进行字段修改成自己想要的,并实现json字符串和list集合相互转换
一、前言
小编今天遇到一个需求,是一个表中有个字段是存放json字符串的,为了减少json字符串的长度,我们里面的实体类字段存储使用第一个字母来,这样数据库的字段大小就可以节省很多。
通俗的说一下哈:
就是实体类上的名字为model、data、time,我们在保存到json字符串中为m、d、t。
别着急,小编接着解释需求哈!!
二、转化前后展示
原来的这样,比较占字段!
[{ "username": "wang", "password": "123" }]
优化后:
[{ "u": "wang", "p": "123" }]
现在大家明白了吧!!
小编使用jackson的@JsonProperty()来解决这个问题,使用之后,带来了json字符串和list集合要相互转化,因为要新增和修改!
三、@JsonProperty()使用
@JsonProperty()作用:在序列号和反序列化时使用,作用于实体类的属性上,作用是把该属性的名称序列化成自己想要的名称。
json实体类:
import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data public class Json { @JsonProperty("u") private String username; @JsonProperty("p") private String password; }
保存数据库的实体类:
@Data public class Test implements Serializable { private static final long serialVersionUID = 337361630075002456L; @TableId(type= IdType.ASSIGN_ID) private long id; private String name; private String gender; private String data; private LocalDateTime createDate; private LocalDateTime updateDate; }
下面我们转json就可以保存到数据库了,转json的时候就会按照我们写的u和p进行保存的!
四、json字符串和list集合相互转化
小编为了省事直接在controller进行测试了哈!!
@RestController @RequestMapping("/test") @Slf4j @RequiredArgsConstructor public class TestController { private final TestService testService; @NonNull private TestMapper testMapper; @GetMapping("/update") public Result update() throws JsonProcessingException { List<Json> jsonList = new ArrayList<>(); Json json = new Json(); json.setPassword("123"); json.setUsername("wang"); jsonList.add(json); Json json1 = new Json(); json1.setPassword("456"); json1.setUsername("zhang"); jsonList.add(json1); // list转json String jsonString = new ObjectMapper().writeValueAsString(jsonList); Test test = new Test(); test.setName("小米"); test.setId(100); test.setData(jsonString); testMapper.insert(test); // json 转 list List<Json> list = new ObjectMapper().readValue(jsonString, new TypeReference<List<Json>>() { }); System.out.println(list); return Result.success("成功"); } }
如果对@RequiredArgsConstructor不了解的可以看一下小编的这篇文章!@RequiredArgsConstructor代替@Autowrired
五、测试展示
下图可以看到我们在保存到数据库的时候,转完json后已经是u和p了。
我们在把json字符串转list集合时,他自动帮我们转化为实体类本来的样子了!是不是干净又卫生哈!!
不过使用会有异常,我们可以try catch就可以了!!我们在看一下数据库里保存的:
六、总结
铛铛铛!!测试终于结束,恭喜大家学到新东西,本来会的就赶紧关掉页面!小编灰溜溜的跑路了!总之分享小知识给大家还是挺开心的!!如果感觉有用,不妨点个关注,我们来日方长哈!!