最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

解決的方法很多,比較簡單直接的方法是在Aqua這個實體類里面加一個無參的構造函數(shù)。比較復雜的也可通過向Jackson添加強制的轉換器的方法讓Jackson理解這個JSON對象。

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

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

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

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

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

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

解決方法一:不推薦

解決方法如下,因為如果不設置register-default='false'Spring 會默認幫我們注冊7個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)上有人說,需要把mvc:annotation注解移動到最后,也有人說,messageConverter需要在mvc-converter之前注入SPring容器,眾說紛紜,不妨試試我這種方法,我的理解應該是,Spring會幫我們注入一些默認的,但是這些并不是我們需要的,而且我們在配置的時候,沒有及時的覆蓋掉Spring默認配置的。

所以會造成配置之后無效果的問題。筆者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,這種情,無論怎么改都會亂碼的。

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

相關文章

最新評論

青岛市| 淳安县| 南平市| 莱阳市| 新建县| 盐边县| 大连市| 耿马| 修文县| 金坛市| 紫云| 卓尼县| 常熟市| 苏尼特左旗| 于田县| 敦化市| 平度市| 克拉玛依市| 鲜城| 谢通门县| 固镇县| 木兰县| 秦皇岛市| 勐海县| 安岳县| 常德市| 明溪县| 荥经县| 封开县| 梅河口市| 安顺市| 丹阳市| 尼木县| 威海市| 麻栗坡县| 新源县| 临湘市| 常州市| 光泽县| 伊春市| 尤溪县|