做springboot+thymeleaf练习时,发现在前端用ajax(contentType : “application/json ; charset=utf-8”)传数据给后端硬是获取为null,用HttpServletRequest拿值为null、用@RequestParam获取为null、用@RequestBody获取直接报warning,说什么我传的参数token可能为null 我是人快傻了,作为一个小白,心态炸裂。 特在这里做个记录:
引发这宗‘血案’的真凶:
application/x-www-form-urlencoded与application/json 对于这两个老兄,首先它们都是一种发送请求的格式说明。
application/x-www-form-urlencoded: 这个是表单默认的编码方式,当请求方式为get时候,浏览器用x-www-form-urlencoded的编码方式把表单数据转换成一个字串(key=value),然后把这个字串append到url后面,用?分割,加载这个新的url。 当请求方式为post时候,浏览器把表单数据封装到http body中,然后发送到server
application/json 这个编码方式就是将数据转换成json格式(json字符串),所以这就是为什么HttpServletRequest拿值为null、用@RequestParam获取为null的真凶
解决方案
ajax 中的 contentType:"application/json;charset=utf-8"改成contentType:"application/x-www-form-urlencoded;charset=utf-8"你可以通过key去取value,就不会出现HttpServletRequest拿值为null、用@RequestParam获取为null的问题了。 但,如果前端传过给后台的数据是一个对象,那我们还是使用application/json传递,用@RequestBody获取,然后再用map对json数据进行一个拆分存储,方标使用
|