Каков правильный подход к сохранению нового объекта? Получение встроенного объекта json с помощью @RequestBody или получение множества @RequestParam?

0

Чтобы сохранить новый объект, например объект User:

class User {

private String name;
private String email;

}

Должен ли я попросить моего клиента отправить @RequestBody следующим образом:

{
"name":"Josh",
"email":"[email protected]"
}

Или, может быть, стоит просто попросить несколько @RequestParams вроде этого:

/api/user?name=Josh&&[email protected]

И создать метод, который строит объект из этих параметров? Я имею дело с некоторыми сложными объектами в моем проекте, если это имеет какое-либо отношение к моему вопросу.

Спасибо за вашу помощь.

2
  • @RequestBody - хороший вариант, потому что он позволяет напрямую сопоставить полезную нагрузку с вашим объектом. 2 дня назад
  • Используйте, @RequestBodyесли вам нужна полезная нагрузка, используйте @ModelAttributeдля автоматической привязки параметров запроса к объекту. Любой из них будет работать с Userобъектом (при условии, что) в этом случае. 2 дня назад
2

@RequestBody и @RequestParam оба будут работать нормально, вы, как backend-разработчик, должны решить, как вы хотите принимать данные, и @RequestBody - рекомендуемый способ принять такой объект.

Фактически, вы можете использовать зависимость Джексона для привязки данных, и если вы используете весеннюю загрузку, она автоматически сделает это за вас.

Что такое привязка данных? Преобразование объекта JSON в Java POJO или наоборот в соответствии с нашими потребностями.

@RequestBody передаст вам весь объект, тогда как в @RequestParam вам нужно будет принять значения индивидуально, а затем создать объект и установить значения. Так что теперь мы можем сравнить, что у нас меньше работы, если мы решим работать с @RequestBody.

Новый участник
Adarsh Gupta is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
1

Оба ваших подхода будут работать, но стандартный способ определенно использует:

POST @RequestBody JSON of { user } to /users

GET технически будет работать, но использование метода HTTP GET подразумевает, что действие идемпотентно, то есть оно не изменит базовые данные (с точки зрения клиента) - и это почти наверняка не так при создании нового пользователя.

Кроме того, текущий объект User достаточно прост, чтобы его можно было представить параметрами строки запроса, но это может измениться в будущем, когда пользователь может содержать различную контактную информацию, такую ​​как адреса.

0

Spring MVC имеет 2 аннотации для обработки сопоставления с объектом.

  • @RequestBody для отображения полезной нагрузки запроса на объект.
  • @ModelAttribute для сопоставления параметров запроса (автоматически) с объектом.

Так что на самом деле оба могут автоматически отображаться на ваш Userобъект.

@PostMapping
public User register(@RequestBody User user) {}

или

@PostMapping
public User register(@ModelAttribute User user) {}

Первый будет использовать полезную нагрузку, второй будет использовать параметры запроса для создания Userобъекта. Таким образом, оба будут работать, но служат для разных сценариев использования.