Spring MVC - POST для разных URL из контроллера - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь создать чат-бота.Я могу получать данные из пользовательского ввода из javascript через ajax, но я хочу отправить ответ после запуска 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, который выполняет запрос по запросу пользователя, а не прослушивает ответ.Также в моем случае Я хочу отправить данные из Spring MVC в javascript без запроса GET от javascript.

Как я могу это сделать?

Редактировать: в javascript я бы использовал что-то вроде:

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

Как я могу сделать POST из Spring MVC Controller?

Ответы [ 3 ]

2 голосов
/ 26 сентября 2019

Довольно просто вы можете использовать приведенный ниже код, чтобы получить ответ в 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 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) {
         }
  });
0 голосов
/ 26 сентября 2019

Попробуйте добавить @ResponseBody в ваш метод.Это помогает понять, что метод должен отправить ответ на этот вызов ajax, когда запрос POST вернет какое-то значение.

@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
}
0 голосов
/ 26 сентября 2019

Использование websocket было бы лучшим решением.Если вы хотите ответить на строку json для запроса POST, равного myurl/chat, вам просто нужно изменить метод, как показано ниже:

@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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...