Spring REST ResponseEntity, как вернуть ответ, когда у нас есть два объекта - PullRequest
0 голосов
/ 14 ноября 2018

1. For example UserProfile which has 3 properties name,dob, age 2. And 2nd class let's say UserProfileResponse which has only "id"

public ResponseEntity<UserProfileResponse> createUserProfile(@RequestBody UserProfile userProfile)
{
      UserProfileResponse userProfileResponse = new UserProfileResponse();
      userProfileResponse.setId(??)  // How do I set ID?
      **createUserProfileData(userProfile)  /// This is used to create DB record** 
      return new ResponseEntity<UserProfileResponse>(userProfileResponse,HTTPStatus.OK);  
}

Итак, для этого userProfileResponse.setId(??) как я могу установить значение идентификатора? могу ли я сделать прямо так userProfileResponse.setId(userProfileResponse.getId());

Или я могу передать еще одно тело запроса, подобное этому

ResponseEntity<UserProfileResponse> createUserProfile(@RequestBody UserProfile userProfile, @RequestBody ID)

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Если вы хотите получить значение из UserProfile RequestBody, которого оно на самом деле не содержит. Извините, что это невозможно.

И мы можем получить только один requestBody за раз, поэтому нам нужно использовать некоторыедругие способы сбора информации. Есть несколько других решений:

  • Используйте @PathVariable для получения идентификатора из URL
  • Используйте @RequestParam для получения идентификатора из requestParam
  • Добавьте новое поле с именем Id в свой UserProfile
  • Используйте другой способ, которым можно получить ваш Id, это зависит от того, как вы сохраняете или генерируете Id.

В вашем случае, I 'Я не уверен, что вы собираетесь делать с идентификатором.

Если метод "createUserProfileData" означает, что вам нужно сначала предложить идентификатор для сохранения.

Ну, я не знаю, какая база данных икакой тип фреймворка вы используете. Как я знаю, большая часть фреймворка и базы данных имеет возможность генерировать идентификатор автоматически. Но если вы настаиваете на создании идентификатора самостоятельно, я рекомендую вам UUID.

Если метод «createUserProfileData» сохраняет UserProfile буквально, а идентификатор генерируется самой базой данных, тогда вы просто делаете это и помещаете Id, представляющий запись, которую вы только что сохранили в UserProfileResponse.

Что касается того, как получить идентификатор, представляющий только что сохраненную запись? Это зависит от используемой вами среды и от того, как именно написан код.

0 голосов
/ 14 ноября 2018
You can call createUserProfileData method and return the id of the newly inserted object from it. 
In createUserProfileData method, you can call saveAndFlush method of the repository which will save the userProfile Object.
This will return the id of the newly inserted object.

Finally your code will look like below:

public ResponseEntity<UserProfileResponse> createUserProfile(@RequestBody UserProfile userProfile)
{
      UserProfileResponse userProfileResponse = new UserProfileResponse();
      int id = createUserProfileData(userProfile)
      userProfileResponse.setId(id) 
      return new ResponseEntity<UserProfileResponse>(userProfileResponse,HTTPStatus.OK);  
}
...