亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于Spring Web Jackson對(duì)RequestBody反序列化失敗的解決

 更新時(shí)間:2020年09月28日 09:38:48   作者:岸邊書(shū)店  
這篇文章主要介紹了基于Spring Web Jackson對(duì)RequestBody反序列化失敗的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近在用Spring Web做一些Restful API的實(shí)現(xiàn)試驗(yàn),碰到了@RequestBody 的JSON無(wú)法被正常反序列化的問(wèn)題。服務(wù)端的代碼大致如下:

@RequestMapping(value = "/aquas", method = RequestMethod.POST)
public Aqua createAqua(@RequestBody Aqua aqua) {
 return aqua;
}

研究后發(fā)現(xiàn),由于Aqua這個(gè)實(shí)體類缺少了默認(rèn)的無(wú)參構(gòu)造函數(shù)(如果自行添加了有參數(shù)的構(gòu)造函數(shù),默認(rèn)的無(wú)參構(gòu)造函數(shù)就需要手動(dòng)添加),Spring Web默認(rèn)使用的JSON序列化框架-Jackson就無(wú)法正常反序列化。此時(shí)服務(wù)器會(huì)返回400 Bad Request.

解決的方法很多,比較簡(jiǎn)單直接的方法是在Aqua這個(gè)實(shí)體類里面加一個(gè)無(wú)參的構(gòu)造函數(shù)。比較復(fù)雜的也可通過(guò)向Jackson添加強(qiáng)制的轉(zhuǎn)換器的方法讓Jackson理解這個(gè)JSON對(duì)象。

今天這里要介紹的方式是利用注解讓Jackson理解如何反序列化實(shí)體類的JSON。這個(gè)方法更加靈活,也十分簡(jiǎn)單。實(shí)體類的部分代碼如下:

@JsonCreator
public Aqua(@JsonProperty("aquaId") String id) {
 this.id = id;
}

在自定義的構(gòu)造函數(shù)上面添加@JsonCreator的注解,同時(shí)在參數(shù)上加上@JsonProperty的注解配合使用。加上這兩個(gè)注解之后,Jackson不需要無(wú)參構(gòu)造函數(shù)也可以正常反序列化JSON了。

@JsonProperty注解也可以幫助Jackson理解JSON屬性名和實(shí)體類中的變量名不一致的情況。

在這里需要注意,如果有多個(gè)構(gòu)造函數(shù),建議僅僅在一個(gè)構(gòu)造函數(shù)上面加上@JsonCreator注解,以免不必要的麻煩。

補(bǔ)充知識(shí):Springboot springmvc 配置messageConverter(StringHttpMessageConverter)不生效原因解決

解決方法一:不推薦

解決方法如下,因?yàn)槿绻辉O(shè)置register-default='false'Spring 會(huì)默認(rèn)幫我們注冊(cè)7個(gè)messageConvert 如下圖

 <bean id="messageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
  <constructor-arg value="UTF-8"></constructor-arg>
  <property name="supportedMediaTypes">
   <list>
    <value>text/plain;charset=UTF-8</value>
   </list>
  </property>
 </bean>
 <mvc:annotation-driven enable-matrix-variables="true" content-negotiation-manager="contentNegotiationManager">
  <mvc:message-converters register-defaults="false">
   <ref bean="messageConverter"></ref>
  </mvc:message-converters>
 </mvc:annotation-driven>

如下圖所示,而且StringHttpMessageConverter,網(wǎng)上有人說(shuō),需要把mvc:annotation注解移動(dòng)到最后,也有人說(shuō),messageConverter需要在mvc-converter之前注入SPring容器,眾說(shuō)紛紜,不妨試試我這種方法,我的理解應(yīng)該是,Spring會(huì)幫我們注入一些默認(rèn)的,但是這些并不是我們需要的,而且我們?cè)谂渲玫臅r(shí)候,沒(méi)有及時(shí)的覆蓋掉Spring默認(rèn)配置的。

所以會(huì)造成配置之后無(wú)效果的問(wèn)題。筆者Spring版本為5.0.3

maven依賴如下

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>5.0.3.RELEASE</version>
  </dependency> 

<mvc:annotation-driven enable-matrix-variables="true" content-negotiation-manager="contentNegotiationManager">
 <mvc:message-converters register-defaults="false">
  <ref bean="messageConverter"></ref>
  <ref bean="jackson2HttpMessageConverter"></ref>
 </mvc:message-converters>
 <mvc:path-matching path-helper="mph"></mvc:path-matching>
</mvc:annotation-driven>

方法2 ,看看你的文件字符編碼是否正確?

比如有的文件是GBK,有的文件是UTF-8,這種情,無(wú)論怎么改都會(huì)亂碼的。

以上這篇基于Spring Web Jackson對(duì)RequestBody反序列化失敗的解決就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • RabbitMQ消息確認(rèn)機(jī)制剖析

    RabbitMQ消息確認(rèn)機(jī)制剖析

    這篇文章主要為大家介紹了RabbitMQ消息確認(rèn)機(jī)制剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java工具包之Lombok使用

    Java工具包之Lombok使用

    這篇文章主要介紹了Java工具包之Lombok使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 淺談java 增強(qiáng)型的for循環(huán) for each

    淺談java 增強(qiáng)型的for循環(huán) for each

    下面小編就為大家?guī)?lái)一篇淺談java 增強(qiáng)型的for循環(huán) for each。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • JAVA偏向鎖的原理與實(shí)戰(zhàn)

    JAVA偏向鎖的原理與實(shí)戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了JAVA偏向鎖的原理與實(shí)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • @Schedule?如何解決定時(shí)任務(wù)推遲執(zhí)行

    @Schedule?如何解決定時(shí)任務(wù)推遲執(zhí)行

    這篇文章主要介紹了@Schedule?如何解決定時(shí)任務(wù)推遲執(zhí)行問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 簡(jiǎn)單講解奇偶排序算法及在Java數(shù)組中的實(shí)現(xiàn)

    簡(jiǎn)單講解奇偶排序算法及在Java數(shù)組中的實(shí)現(xiàn)

    這篇文章主要介紹了奇偶排序算法及Java數(shù)組的實(shí)現(xiàn),奇偶排序的時(shí)間復(fù)雜度為O(N^2),需要的朋友可以參考下
    2016-04-04
  • Java中的@Builder注解問(wèn)題詳解

    Java中的@Builder注解問(wèn)題詳解

    這篇文章主要介紹了Java中的@Builder注解詳解,@Builder 注解的其中一個(gè)大坑會(huì)導(dǎo)致默認(rèn)值失效,這是使用此注解出現(xiàn)的一個(gè)問(wèn)題,總的來(lái)說(shuō),不推薦再使用 @Builder 注解,接下來(lái)講重點(diǎn)介紹其原因和替代方案,需要的朋友可以參考下
    2023-10-10
  • Springboot如何使用filter對(duì)request body參數(shù)進(jìn)行校驗(yàn)

    Springboot如何使用filter對(duì)request body參數(shù)進(jìn)行校驗(yàn)

    這篇文章主要介紹了Springboot如何使用filter對(duì)request body參數(shù)進(jìn)行校驗(yàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • JVM調(diào)優(yōu)實(shí)戰(zhàn)

    JVM調(diào)優(yōu)實(shí)戰(zhàn)

    本文主要介紹了JVM調(diào)優(yōu)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 23種設(shè)計(jì)模式(20)java中介者模式

    23種設(shè)計(jì)模式(20)java中介者模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java中介者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論