angular.js - ApringMVC接收angular的post请求,参数为null或者直接400,求破?

【字号: 日期:2023-01-14浏览:21作者:雯心

问题描述

这两天被这个东西搞死,最可恨的是,有些项目没事,有些项目有事,而我却不知道为什这样。刚学一个星期。

是这样地,下面有两个方法,前一个呢,接收的就是json,没事。

后一个呢,接受的是text,然后直接400,如果改成@requestBody呢,就是null。

/** * 验证注册名 **/ @ResponseBody @RequestMapping(value = 'validateName', method = RequestMethod.POST) public String userNameValidate(@RequestParam('name') String name) {if (userServive.checkRegisterName(name)) { return '1';} else { return '0';} } /** * 保存注册信息 **/ @ResponseBody @RequestMapping(value = '/saveNewUser', method = RequestMethod.POST, consumes = 'application/x-www-form-urlencoded') public String saveRegisterInfo(@RequestParam('user') User user) {System.out.println(user);//User u = userServive.saveRegisterUser(user);if (user != null) { return '1';} else { return '0';} }

然后,你看看这两者的请求头和响应头的区别:

前一个方法的:Content-Type都对应着呢,没事。

Response Headersview sourceContent-Length:1Content-Type:application/json;charset=UTF-8Date:Mon, 25 Apr 2016 13:51:18 GMTProxy-Connection:keep-aliveServer:Apache-Coyote/1.1Request Headersview sourceAccept:application/json, text/plain, */*Accept-Encoding:gzip, deflate, lzmaAccept-Language:zh-CN,zh;q=0.8Connection:keep-aliveContent-Length:11Content-Type:application/x-www-form-urlencoded

但是后一个就不对应了:就出事了。

Response Headersview sourceConnection:closeContent-Language:enContent-Length:1105Content-Type:text/html;charset=utf-8Date:Mon, 25 Apr 2016 14:10:17 GMTProxy-Connection:keep-aliveServer:Apache-Coyote/1.1Request Headersview sourceAccept:application/json, text/plain, */*Accept-Encoding:gzip, deflate, lzmaAccept-Language:zh-CN,zh;q=0.8Connection:keep-aliveContent-Length:50Content-Type:application/x-www-form-urlencoded

所以,我上面的第二个方法,就加个consumer或者production,甚至header都试过了,还是改不了那个:

Content-Type:text/html;charset=utf-8

还是错错错错错错。我加了jackson的三个包的呀

怎么回事??

最可恨的是,前些日子,同样的方法,用得好好地,换一个马甲,就不行了。哎

问题解答

回答1:

angular post的请求是不会把数据序列化的,你需要修改一下$httpProvider就可以了

$httpProvider.defaults.headers.common[’X-Requested-With’] = ’XMLHttpRequest’;$httpProvider.defaults.transformRequest = function(obj){ var str = []; for(var p in obj) {str.push(encodeURIComponent(p) + ’=’ + encodeURIComponent(obj[p])); } return str.join('&');};$httpProvider.defaults.headers.post = { ’Content-Type’: ’application/x-www-form-urlencoded’};

相关文章: