日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot中使用@JsonComponent

發布時間:2024/2/28 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot中使用@JsonComponent 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 序列化
    • 反序列化
    • 在同一個class中序列化和反序列化

Spring Boot中使用@JsonComponent

@JsonComponent 是Spring boot的核心注解,使用@JsonComponent 之后就不需要手動將Jackson的序列化和反序列化手動加入ObjectMapper了。使用這個注解就夠了。

序列化

假如我們有個User類,它里面有一個Color屬性:

@Data @AllArgsConstructor public class User {private Color favoriteColor; }

接下來我們來創建針對User的序列化組件,我們需要實現JsonSerializer接口:

@JsonComponent public class UserJsonSerializer extends JsonSerializer<User> {@Overridepublic void serialize(User user, JsonGenerator jsonGenerator,SerializerProvider serializerProvider) throws IOException,JsonProcessingException {jsonGenerator.writeStartObject();jsonGenerator.writeStringField("favoriteColor",getColorAsWebColor(user.getFavoriteColor()));jsonGenerator.writeEndObject();}private static String getColorAsWebColor(Color color) {int r = (int) Math.round(color.getRed() * 255.0);int g = (int) Math.round(color.getGreen() * 255.0);int b = (int) Math.round(color.getBlue() * 255.0);return String.format("#%02x%02x%02x", r, g, b);} }

在上面的類中,我們自定義了序列化的方法。接下來我們測試一下:

@JsonTest @RunWith(SpringRunner.class) public class UserJsonSerializerTest {@Autowiredprivate ObjectMapper objectMapper;@Testpublic void testSerialization() throws JsonProcessingException {User user = new User(Color.ALICEBLUE);String json = objectMapper.writeValueAsString(user);assertEquals("{\"favoriteColor\":\"#f0f8ff\"}", json);} }

反序列化

同樣的,我們實現JsonDeserializer接口:

@JsonComponent public class UserJsonDeserializer extends JsonDeserializer<User> {@Overridepublic User deserialize(JsonParser jsonParser,DeserializationContext deserializationContext) throws IOException,JsonProcessingException {TreeNode treeNode = jsonParser.getCodec().readTree(jsonParser);TextNode favoriteColor= (TextNode) treeNode.get("favoriteColor");return new User(Color.web(favoriteColor.asText()));} }

我們看下怎么調用:

@JsonTest @RunWith(SpringRunner.class) public class UserJsonDeserializerTest {@Autowiredprivate ObjectMapper objectMapper;@Testpublic void testDeserialize() throws IOException {String json = "{\"favoriteColor\":\"#f0f8ff\"}"User user = objectMapper.readValue(json, User.class);assertEquals(Color.ALICEBLUE, user.getFavoriteColor());} }

在同一個class中序列化和反序列化

@JsonComponent public class UserCombinedSerializer {public static class UserJsonSerializer extends JsonSerializer<User> {@Overridepublic void serialize(User user, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {jsonGenerator.writeStartObject();jsonGenerator.writeStringField("favoriteColor", getColorAsWebColor(user.getFavoriteColor()));jsonGenerator.writeEndObject();}private static String getColorAsWebColor(Color color) {int r = (int) Math.round(color.getRed() * 255.0);int g = (int) Math.round(color.getGreen() * 255.0);int b = (int) Math.round(color.getBlue() * 255.0);return String.format("#%02x%02x%02x", r, g, b);}}public static class UserJsonDeserializer extends JsonDeserializer<User> {@Overridepublic User deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)throws IOException, JsonProcessingException {TreeNode treeNode = jsonParser.getCodec().readTree(jsonParser);TextNode favoriteColor = (TextNode) treeNode.get("favoriteColor");return new User(Color.web(favoriteColor.asText()));}} }

為了方便,我們還可以在同一個類中定義兩個內部類來實現序列化和反序列化。如上所示。

本文的例子可以參考https://github.com/ddean2009/learn-springboot2/tree/master/springboot-jsoncomponent

更多精彩內容且看:

  • 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
  • java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程

更多教程請參考 flydean的博客

總結

以上是生活随笔為你收集整理的Spring Boot中使用@JsonComponent的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。