亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:2日期:2023-08-11 13:33:16

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

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

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

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

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

@JsonCreatorpublic Aqua(@JsonProperty('aquaId') String id) { this.id = id;}

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

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

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

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

解決方法一:不推薦

解決方法如下,因為如果不設置register-default=’false’Spring 會默認幫我們注冊7個messageConvert 如下圖

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

所以會造成配置之后無效果的問題。筆者Spring版本為5.0.3

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

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反序列化失敗的解決就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 欧美日韩三区 | 国产在线精彩视频二区 | 一国产一级淫片a免费播放口 | 欧美综合国产精品日韩一 | 高清欧美一区二区免费影视 | 国产最新网址 | 国产精品久久久久久网站 | a级片在线观看视频 | 日韩精品在线视频 | 国产在线观看美女福利精 | 伊人久久青草青青综合 | 国产成人v片视频在线观看 国产成人v视频在线观看 | 色综合网亚洲精品久久 | 成人黄色在线观看视频 | 亚洲国产精品人久久 | 天天在线天天综合网色 | 久久国产a | 日韩一级特黄 | 亚洲美女福利视频在线 | 大尺度做爰床戏呻吟免费观 | 亚洲欧美日韩一区二区在线观看 | 91精品国产肉丝高跟在线 | 拍拍在线观看免费播放 | 成年人xxx| 狠狠色丁香久久婷婷综合_中 | 欧美日韩在线视频专区免费 | 免费黄色视屏网站 | 亚洲国产成人久久精品图片 | 色视频国产 | 久久要 | 加勒比色老久久爱综合网 | 亚洲一级爽片 | 国产精品成人影院 | 日韩欧美一区在线观看 | 51精品视频在线观看视频 | 国产成人麻豆tv在线观看 | 大尺度一级毛片波多野结衣 | 中国一级毛片视频 | 亚洲欧美久久精品1区2区 | a级国产乱理论片在线观看看 | 精品国产第一国产综合精品 |