當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Boot中使用@JsonComponent
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot中使用Swagge
- 下一篇: Spring Boot国际化支持