小案例:
最近在项目中发现了一个问题:使用POST fegin调用其它模块接口时,被调用接口使用@RequestParam 进行接收一个String的json参数。但是在将参数转换为对象时发现转换失败。经断点进行查看时发现少了结束符“}”导致json转化时出错!但是在调用方进行debug查询时请求的stringjson参数是完整了。思考应该是fengin调用转递时丢失了“}”结束符。考虑后发现是因为注解@RequestParam 的问题。使用@requestParam的参数是从url上得到的。但是url会有长度限制。更换为@RequestBody 后就无此问题了。
@RequestParam
注解@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。
RequestParam可以接受简单类型的属性,也可以接受对象类型。
@RequestParam有三个配置参数:
required 表示是否必须,默认为 true,必须。
defaultValue 可设置请求参数的默认值。
value 为接收url的参数名(相当于key值)。
@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。
@RequestBody
注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x