【问题标题】:Receive parameters in Rest controller from Post method using Spring and Ajax使用 Spring 和 Ajax 从 Post 方法接收 Rest 控制器中的参数
【发布时间】:2018-03-24 02:19:30
【问题描述】:

我正在尝试使用 POST 方法使用 AJAX 将两个参数发送到我的 Spring REST 控制器。然而,这些参数在我的控制器中显示为null。请找到代码,如果我遗漏了什么,请告诉我。

var formData = {
  txToClose: '1234,5678,98549',
  sno:  '0195'
};

$.ajax({
  type: 'post',
  url: url,
  async: false,  
  data: JSON.stringify(formData),
  contentType: "application/json",
  dataType: "json",      
  success: function(result, status, xhr) {
    console.log(result);
  }                           
});
@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);
}

【问题讨论】:

  • 除了这个问题,你真的应该删除async: false。这是可怕的做法
  • @RoryMcCrossan,知道为什么没有收到这些参数吗?
  • 不抱歉。我没有使用 Spring 的经验。
  • @RoryMcCrossan,没问题。感谢您的意见。
  • 控制在控制器下吗???从您的日志中查看

标签: jquery ajax spring rest spring-mvc


【解决方案1】:

像这样创建类:

    class Myclass{
          private String  txToClose;
             private String    sno; 
 // getters setters
    }

在你的方法中是这样的:

@PostMapping("/txToClose")  
public ResultDto txToClose(@RequestBody Myclass class ) throws BBException
{
   // your logic
}

【讨论】:

  • 但是除了创建类之外,为什么我不能使用 request.getparameter 接收?
  • 我按照你的方法试过了,但还是不行。 @Requestbody 有 415 种不受支持的媒体类型,所以我使用了 ModelAttribute,但仍然传递了 null 值
  • 真诚地,我从来没有使用 request.getParameter() 在 spring 中获取 param json,但你可以看到这个stackoverflow.com/questions/34781980/read-json-in-java-servlet/…
  • 将内容类型添加到您的请求应用程序/json
  • public boolean txToClose(@RequestBody ObjectNode json) { } 这行得通
【解决方案2】:

我认为在您的代码中不起作用的部分是 request.getParameter() 因为它无法识别 json 数据的参数和值。 而是使用这样的东西:

StringBuilder sb = new StringBuilder();
BufferedReader reader = request.getReader();
try {
      String line;
      while ((line = reader.readLine()) != null) {
          sb.append(line).append('\n');
      }
 } 
 finally {
        reader.close();
 }
 System.out.println(sb.toString());

在您的控制器中使用上述逻辑来处理 json 请求。请参阅link 以获取更多想法以处理 json 时作为 HttpServeletRequest。

【讨论】:

  • Mohit.. 我解决了这个问题。 public ResultDto txToClose(HttpServletRequest request, HttpServletResponse response,@RequestBody ObjectNode json) throws BBException { logger.info("Called txToClosecontroller"); ResultDto 结果 = 新 ResultDto();字符串 txToClose=json.get("txToClose").asText(); }
  • 那你是用实体来接受请求的吧??
  • 如果没有@RequestBody 也可以,请尝试我的方法一次,看看它是否有效。如果可以的话,仅用于测试目的。
【解决方案3】:

通过使用解决

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(); 
} 

【讨论】:

    猜你喜欢
    • 2014-08-14
    • 2019-09-07
    • 2018-12-16
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多