请求参数为空

时间:2015-09-30 18:19:15

标签: angularjs spring spring-mvc

这是我的角度js电话

  var req = {                   
     method: 'POST',
     url: newMessageUrl+"/plain",
     headers: {
       'Content-Type': "text/plain"
     },
     data: {'title':'aaaaa'}//$scope.pubmFormModel
  };

  $http(req).then(function(d){      
          msgSuccess();
  }, function(e){
  });  

这是我的要求

Request Header
Accept:application/json, text/plain, */*
Content-Type:text/plain
Origin:file://

Request Pauload
   title: "aaaaa"

这是我的弹簧处理程序:

   @RequestMapping(method = RequestMethod.POST, value = "/newmessage/plain")
   public ResponseEntity<?> publishMessage(HttpServletRequest request) throws Exception
   {

如果我request.getParameter("title") null

,请执行此操作

3 个答案:

答案 0 :(得分:1)

data: {'title':'aaaaa'}

表示:将此JavaScript对象转换为JSON,并将结果作为请求的主体发送。

要在服务器上访问它,您需要读取请求主体,将JSON解析为Map或Java对象,并提取对象的title属性。

为了能够将标题作为请求参数获取,您需要使用application/x-www-form-urlencoded内容类型,并将字符串'title=aaaaa'作为请求的主体发送。

答案 1 :(得分:0)

如果要将其作为请求参数获取,则需要将其作为请求参数而不是请求体传递。

var req = {                   
     method: 'POST',
     url: newMessageUrl+"/plain?title=aaaa",
     headers: {
       'Content-Type': "text/plain"
     },
     data: {}
  };

  $http(req).then(function(d){      
          msgSuccess();
  }, function(e){
  }); 

如果有更多属性,更好的方法是将其作为请求主体发送。有更多理由使用requestBody,例如JSR验证等。

您的原始JS代码保持不变:

 var req = {                   
         method: 'POST',
         url: newMessageUrl+"/plain",
         headers: {
           'Content-Type': "text/plain"
         },
         data: {'title':'aaaaa'}//$scope.pubmFormModel
      };

      $http(req).then(function(d){      
              msgSuccess();
      }, function(e){
      }); 

但是你的Controller代码应该被修改:

@RequestMapping(method = RequestMethod.POST, value = "/newmessage/plain")
public ResponseEntity<?> publishMessage(@RequestBody User user) {
  log.info("title - "+user.getTitle())
}


public class User implements Serializable{
   private String title;

   //getter & setters

}

答案 2 :(得分:0)

如果您正在使用Jquery,则必须将变换器应用于您的请求以由Spring Handler解释。

例如:

 var transformer = function (data) {
        if (data === undefined) {
            return data;
        }
        return $.param(data);
    };

并在您的请求中使用:

var req = {                   
 method: 'POST',
 url: newMessageUrl+"/plain?title=aaaa",
 headers: {
   'Content-Type': "text/plain"
 },
 data: {},
 transformRequest: transformer
};

$http(req).then(function(d){      
      //Did Something good
 }, function(e){
      //Did something bad
 });