电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:3日期: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
相關文章:
主站蜘蛛池模板: 云杂志网-学术期刊-首页 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 | 裹包机|裹膜机|缠膜机|绕膜机-上海晏陵智能设备有限公司 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | CXB船用变压器-JCZ系列制动器-HH101船用铜质开关-上海永上船舶电器厂 | 开云(中国)Kaiyun·官方网站 - 登录入口 | 深圳市八百通智能技术有限公司官方网站 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | ptc_浴霸_大巴_干衣机_呼吸机_毛巾架_电动车加热器-上海帕克 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 天命文免费算命堂_自助算命_自由算命系统_长文周易 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 液氮罐_液氮容器_自增压液氮罐-北京君方科仪科技发展有限公司 | 成都思迪机电技术研究所-四川成都思迪编码器 | 不锈钢丸厂家,铝丸,铸钢丸-淄博智源铸造材料有限公司 | 行星齿轮减速机,减速机厂家,山东减速机-淄博兴江机械制造 | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 | 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ | 气动绞车,山东气动绞车,气动绞车厂家-烟台博海石油机械有限公司 气动隔膜泵厂家-温州永嘉定远泵阀有限公司 | 聚合氯化铝厂家-聚合氯化铝铁价格-河南洁康环保科技 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 空气能采暖,热泵烘干机,空气源热水机组|设备|厂家,东莞高温热泵_正旭新能源 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 新疆乌鲁木齐网站建设-乌鲁木齐网站制作设计-新疆远璨网络 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 合肥礼品公司-合肥礼品定制-商务礼品定制公司-安徽柏榽商贸有限公司 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 软文发布平台 - 云软媒网络软文直编发布营销推广平台 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 贵州自考_贵州自学考试网 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 |