您好,登錄后才能下訂單哦!
Jackson如何在Springboot中使用?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1、SpringMVC中默認(rèn)集成
SpringMVC已經(jīng)默認(rèn)集成了JackSon,如下所示:
@RequestMapping("/addUserInfo") public UserInfo addUserInfo(@RequestBody UserInfo userInfo){ }
可以用UserInfo對象來接前臺傳過來的json,SpringMVC已經(jīng)幫我們自動反序列化。
可以看到,在SpringBoot中,只需要導(dǎo)入web starter,不需要添加其他的依賴,就可以使用Jackson。
2、時間格式化
在序列化的過程中,如果有Date格式,我們可以通過下面幾種方式來對時間字段進(jìn)行格式化。
2.1、注解方式
通過添加JsonFormat注解,可以固定日期格式。
public class UserInfo { private String name; private String password; private Integer age; @JsonFormat(pattern = "yyyy-MM-dd") private Date birth;
也可以通過這個注解指定時區(qū)(time zone)
2.2、重寫bean
也可以重新 JacksonHttpMessageConvertersConfiguration 類中的bean
@Configuration public class WebMvcConfig { @Bean MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd")); mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper); return mappingJackson2HttpMessageConverter; } }
在JacksonHttpMessageConvertersConfiguration這個類中,原來的方法是:
@ConditionalOnClass({ObjectMapper.class}) @ConditionalOnBean({ObjectMapper.class}) @ConditionalOnProperty( name = {"spring.mvc.converters.preferred-json-mapper"}, havingValue = "jackson", matchIfMissing = true ) static class MappingJackson2HttpMessageConverterConfiguration { MappingJackson2HttpMessageConverterConfiguration() { } @Bean @ConditionalOnMissingBean( value = {MappingJackson2HttpMessageConverter.class}, ignoredType = {"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter", "org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter"} ) MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) { return new MappingJackson2HttpMessageConverter(objectMapper); } }
這是最新的版本的spring,與之前版本的略有差異,不過可以看到,給 mappingJackson2HttpMessageConverter方法注入了一個ObjectMapper,那么我們可不可以直接修改ObjectMapper呢?當(dāng)然可以,在Jackson的自動配置類(JacksonAutoConfiguration)中,可以發(fā)現(xiàn):
@ConditionalOnClass({Jackson2ObjectMapperBuilder.class}) static class JacksonObjectMapperConfiguration { JacksonObjectMapperConfiguration() { } @Bean @Primary @ConditionalOnMissingBean ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { return builder.createXmlMapper(false).build(); } }
在這個內(nèi)部類里,提供了ObjectMapper。所以我們可以直接重新這個Bean,也可以達(dá)到全局修改日期格式的作用。
@Configuration public class WebMvcConfig { @Bean ObjectMapper jacksonObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd")); return objectMapper; } }
經(jīng)過測試,注解方式的優(yōu)先級要高于下面的兩種。
3、Jackson的簡單使用
//測試jackSon public static void main(String[] args) throws JsonProcessingException { UserInfo userInfo = getTestUser(); ObjectMapper objectMapper = new ObjectMapper(); //將對象序列化為json字符串 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //忽略為null的字段 String userJsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(userInfo); System.out.println(userJsonString); //將json反序列化為java對象 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); UserInfo userInfo2 = objectMapper.readValue(userJsonString, UserInfo.class); System.out.println(userInfo2); }
關(guān)于Jackson如何在Springboot中使用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。