Java Spring: как использовать @RequestBody для POST JSON объекта

Я создаю API, который получает следующие входные данные и предоставляет следующие выходные данные. Java Spring: как использовать @RequestBody для POST JSON объекта

Я уже создал рабочий метод для "нового":

@RequestMapping(value = "/new", method = RequestMethod.GET)
public StartedGame startGame(HttpSession session){
    List<Game> games = getCurrentGames(session);
    Game newGame = new Game(wordList);
    games.add(newGame);
    return new StartedGame(newGame);
}

Что возвращает следующий JSON:

{
    "gameId": "kvmuyw",
    "word": "_______"
}

Однако мне нужно создать функцию для предположений. Мне не повезло. У меня это заголовок функции, но он не кажется правильным ...

@RequestMapping(value = "/guess", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public Game makeGuess(@RequestBody String json, HttpSession session) 
это не кажется правильным ...: почему? Что делаешь? Чего вы ожидаете? Что происходит вместо этого? Будьте точны. Обратите внимание, что весь смысл JSON в том, что его можно сопоставить с объектами. Зачем брать String json в качестве аргумента и анализировать его самостоятельно вместо того, чтобы принимать объект Guess в качестве аргумента, и позволять Spring (фактически, Джексону) сопоставлять JSON с объектом Guess?
JB Nizet 27.04.2018 21:58

Я получаю ошибку 404. То, что я ожидаю, показано выше на картинке.

ohbrobig 27.04.2018 22:04

Какой URL вы попали? Какой json вы отправили? Как ты его отправил? Когда ваше приложение запускалось, видели ли вы в журналах, что оно сопоставило конечную точку / guess?

takendarkk 27.04.2018 22:06

@JBNizet Вот некоторые результаты с пояснениями: stackoverflow.com/questions/50071720/…

ohbrobig 28.04.2018 02:28

@ohbrobig вы сказали, что получаете ошибку 404, тогда в этом вопросе вы говорите в заголовке, что получаете ошибку 415, а в выводе, который вы вставили, говорится об ошибке 500 ...

eis 28.04.2018 09:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
4 483
1

Ответы 1

Вы, наверное, хотите что-то вроде

@RequestMapping(value = "/guess", method = RequestMethod.POST,
   consumes = "application/json", produces = "application/json")
public Game makeGuess(@RequestBody Guess guess){
  // ..
}

@Data // <- this assuming you're using Lombok - add required accessors if not
public class Guess {
  String game;
  String guess;
}

Однако, если вы получаете 404 Not Found, ваши проблемы связаны не с определением метода, а с тем, что вы отправляете сообщение по неправильному URL-адресу.

Я пробовал использовать объект Guess (с геттерами и сеттерами) ... возможно, я отправляю сообщение на неправильный URL. Какой будет подходящий URL-адрес с помощью описанного выше метода?

ohbrobig 27.04.2018 22:45

Предположим, что объект JSON похож на те, что на картинке выше.

ohbrobig 27.04.2018 22:48

Правый URL @ohbrobig - /guess, при условии, что у вас нет дополнительных сопоставлений на уровне контроллера или приложения. Если да, то это будет /controllerurlvalue/guess или /applicationurlvalue/controllerurlvalue/guess. Вы можете увидеть зарегистрированные URL-адреса из журналов при запуске приложения Spring.

eis 28.04.2018 09:13

@ohbrobig, если вы получаете ошибку 500 с nullpointerexception, как вы утверждаете здесь, это означает, по крайней мере, что ваше сопоставление URL-адресов работает, так что, видимо, у вас это работает

eis 28.04.2018 09:18

Другие вопросы по теме