解决请求接口要以JSON格式请求后端的问题

一开始就跟平常一样写好接口就给前端。发现老是500方法进不来发现是请求头Content-Type的问题导致的

相关知识:

(1):我们默认使用的表单和Jquery默认的Ajax请求,Content-Type都是默认采用:application / x-www-form-urlencoded

(2):提交的数据按照username = qiu&password = 123的方式进行编码,key和val都进行了URL转码,

(3):现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的JSON字符串

(4):所以在(@RequestParam(value =“token”)String token,String columnId)这样是能获取的到数据的

1:在@RequestMapping()中加入produce =“application / json; charset = UTF-8”设置请求头为json格式

@RequestMapping(value = "queryDriverEvaluateById",produces = "application/json;charset=UTF-8")
@ResponseBody

发现还是500方法进不来   网上很多例子都是到这步有些就成功可以请求了,但是我的还是不行。

2:后来找到@RequestBody,来自于com.alibaba.fastjson 

相关知识:

(1):@ RequestBody接收的是一个Json的对象的字符串

(2):@ RequestBody需要把所有请求参数作为JSON解析,因此,不能包含键=值这样的写法在请求URL中,所有的请求参数都是一个JSON

(3):直接通过浏览器输入URL时,@ RequestBody获取不到JSON对象,需要用的Java编程或者基于AJAX的方法请求,将内容类型设置为应用/ JSON

在参数上写@RequestBody JSONObject jsonObject 

queryDriverEvaluateById(@RequestBody JSONObject jsonObject)

 终于发现debug打断点不在报错了,方法进来了。

JSONObject在api中是用一个私有的常量map进行封装的,实际就是一个map,只不过FastJson对其进行了封装可以通过   

String columnId = jsonObject.getString("columnId"); 

获取到数据。有点类似于当前学习Servlet一个一个获取参数(PS:其实就是Map键值对啦)。 

3:虽然不在500报错连方法都进不来了。不过这样写1到两个参数还好,多了还不得累死!所以继续去找解决办法!

如果是多个参数,封装成一个对象,或者本来是一个对象。

能不能通过类似于Spring MVC直接在参数上写对象让框架请求初始化时自动去找设置方法注入属性值呢?

直接形参上写    

@RequestBody DriverEvaluate driverEvaluate

传入的JSON格式字符串自动转为对象!

发现这样是可以做到的,有一点需要注意如果请求需要通过网络传输在实体内需要实现Serializable序列化。

JSON传输的请求格式如这样:

{
        "qiujian": "112",
        "password": "111",
        "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJqd3312312QiLCJpYXQiOjE1NDIwOTA1MTEsInN1YiI6IntcImpwYXBpXCI6XCJqcCFAI1wifSIsImV4cCI6MTU0MjA5MjMxMX0.Jr6LZHMF4i-4aWby7V6GFDKodV11fak-Vzgx-n9Wls0"
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值