Spring REST ResponseEntity当我们有两个对象时如何返回响应

时间:2018-11-14 17:38:28

标签: spring rest web-services spring-mvc spring-restcontroller

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(??)设置ID值? 我可以直接这样做吗userProfileResponse.setId(userProfileResponse.getId());

或者我可以再传递一个这样的请求正文

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

谢谢。

2 个答案:

答案 0 :(得分:2)

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);  
}

答案 1 :(得分:0)

如果您想从RequestBody UserProfile中获取一个实际上不包含它的值,抱歉,这是不可能的。

而且我们一次只能收到一个requestBody,因此我们需要使用其他方式来收集信息。还有其他解决方案:

  • 使用@PathVariable从网址获取ID
  • 使用@RequestParam从requestParam获取ID
  • 在您的UserProfile中添加一个名为Id的新字段
  • 使用其他方式可以获取您的ID,这取决于您保持或生成ID的方式。

对于您而言,我不确定您要如何使用ID。

如果“ createUserProfileData”方法意味着您需要先提供一个ID以保持持久性。

嗯,我不知道您使用的是哪个数据库和哪种框架。据我所知,大多数框架和数据库都具有自动生成ID的能力。但是如果您坚持要自己生成ID,我建议您的UUID。

如果“ createUserProfileData”方法将UserProfile从字面意义上保存到数据库,并且ID由数据库本身生成,则只需执行该操作,然后将代表您刚刚保存的记录的ID放在ID中即可。

关于如何获取ID代表刚刚保存的记录?取决于您使用的框架以及代码的编写方式。