【问题标题】:Spring MVC - POST to different url from controllerSpring MVC - 从控制器发布到不同的 url
【发布时间】:2019-09-26 02:21:22
【问题描述】:

我正在尝试构建一个聊天机器人。我可以通过 ajax 从 javascript 的用户输入接收数据,但我想在 POST 触发后发送响应(现在的响应可以只是用户输入)。

例如: javascript

           //...create jsonObj using userinput
           //Post text to Spring MVC via ajax
            $.ajax({
                url: "myurl/chat",
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify(jsonObj)
            });

控制器:

@RequestMapping(value = "/chat", method = RequestMethod.POST, consumes="application/json")
public void inputChat(@RequestBody String userInput) {
    //I want to send a response back to javascript here
}

然后回到 javascript 我想监听响应并解析它。我发现的所有示例都使用 $getJSON 在用户提示时执行请求,而不是监听响应。同样在我的情况下 我想在没有来自 javascript 的 GET 请求的情况下将数据从 Spring MVC 发送到 javascript。

我该怎么做呢?

编辑:在javascript中我会使用类似的东西:

$.post('/chat/response', function (data) {
   // data is an object
}, 'json');

如何从 Spring MVC 控制器执行 POST?

【问题讨论】:

  • 也许您应该使用 websocket 解决方案?
  • @ScaryWombat 这听起来绝对是一个更好的主意。我会试试的,谢谢。

标签: javascript java jquery ajax spring-mvc


【解决方案1】:

使用 websocket 会是更好的解决方案。如果你想响应myurl/chatPOST请求的json字符串,你只需要改变方法如下代码。

@RequestMapping(value = "/chat", method = RequestMethod.POST, consumes="application/json")
@ResponseBody
public Map<String,Object> inputChat(@RequestBody String userInput) {
    //I want to send a response back to javascript here
    Map<String, Object> result = new HashMap<>();
    result.put("response", "hello!");
    return  result;
}

【讨论】:

    【解决方案2】:

    尝试将@ResponseBody 添加到您的方法中。 它有助于理解当 POST 请求返回一些值时,该方法必须将响应发送回该 ajax 调用。

    @RequestMapping(value = "/chat", method = RequestMethod.POST, 
      consumes="application/json")
     @ResponseBody
     public void inputChat(@RequestBody String userInput) {
    //I want to send a response back to javascript here
    }
    

    【讨论】:

      【解决方案3】:

      很简单,您可以使用下面的代码从 Spring MVC 控制器获取 javascript 响应。

      @RequestMapping(value = "/chat", 
      method = RequestMethod.POST, produces = "application/json; charset=utf-8")
      public @ResponseBody String inputChat(@RequestBody String userInput)
              throws ParseException, IOException {
          String statusValue = "0";
          String messageToSend = "{\"status\":\"" + statusValue + "\"}";
          String json = new Gson().toJson(messageToSend);
          response.setContentType("application/json");
          response.setCharacterEncoding("UTF-8");
          return json;
      }
      

      在“statusValue”中你可以给出你的回应。

      以下是获取值的ajax代码。

      $.ajax({
              url: '/chat',
               data: JSON.stringify(jsonObj),
               success: function(response){
                   var message = JSON.parse(response);
                   // in message you get statusValue  from MVC controller.
               },
               error: function(xhr, status, error) {
               }
        });
      

      【讨论】:

        【解决方案4】:

        很简单,您可以在 javascript 中使用下面的代码到 Spring MVC 控制器来执行此操作。

        @RequestMapping(value = "/chat", 
        method = RequestMethod.POST, produces = "application/json; charset=utf-8")
        public @ResponseBody String inputChat(@RequestBody String userInput)
                throws ParseException, IOException {
            String json = new Gson().toJson("Your string");
            return json;
        }
        

        Ajax 代码。

        $.ajax({
                url: '/chat',
                 data: JSON.stringify(jsonObj),
                 success: function(response){
                     // do anything with this response.
                 },
          });
        

        【讨论】:

          猜你喜欢
          • 2012-10-03
          • 1970-01-01
          • 2012-11-02
          • 2013-10-25
          • 2012-12-30
          • 2017-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多