无法使用Rest Controller中的Postmapping接收参数

时间:2017-10-12 06:40:18

标签: java ajax spring spring-restcontroller

我的Ajax代码如下所示

$.ajax({
    type : 'post',
    url : url,
    async : false,  
    data: {'txToClose': '1234,5678','sno':'0195'},
    contentType : "application/x-www-form-urlencoded; charset=utf-8",
    dataType : "json",      
    success : function(result,status,xhr){
        console.log(result);

    }                           
});

txToClose 值1234,5678将以逗号分隔的字符串形式出现在文本框中。用户将以逗号分隔键入它们。

我试图在controller

中接收它们
@PostMapping("/txToClose")  
public ResultDto txToClose(HttpServletRequest request, HttpServletResponse response) throws BBException
{
    logger.info("Called txToClose controller");
    ResultDto resultDto = new ResultDto();

    String txToClose= request.getParameter("txToClose");
    String sno= request.getParameter("sno");

    logger.info("Transactions to close :"+txToClose+", Serial Num :"+sno);
}

输出

  

要关闭的交易:null,Serial Num:null

我在这里缺少什么?

3 个答案:

答案 0 :(得分:1)

您将数据作为请求正文发布,当然使用request.getParameter()会为您提供null。 getParameter()用于从URL参数中检索值。

我对SpringMVC不太熟悉,但尝试将方法参数更改为

public ResultDto txToClose(@RequestBody ResultDto resultDto ) throws BBException
{
    logger.info("Called txToClose controller");

    String txToClose= resultDto.getTxtToClose();
    String sno= resultDto.getSno();

    logger.info("Transactions to close :"+txToClose+", Serial Num :"+sno);
}

我假设您的ResultDto与您的JSON格式相同。

答案 1 :(得分:0)

删除该行

contentType:" text / plain;字符集= UTF-8",

或使用默认的contentType

contentType:" application / x-www-form-urlencoded;字符集= UTF-8",

它应该有用。

答案 2 :(得分:0)

我通过在签名中添加@RequestBody ObjectNode json解决了这个问题。

public ResultDto txToClose(HttpServletRequest request, HttpServletResponse response,@RequestBody ObjectNode json) throws BBException
{
    logger.info("Called txToClosecontroller");
    ResultDto result = new ResultDto();

    String txToClose= json.get("txToClose").asText();
}