[英]Springboot How to Return a response after a POST
我想创建一个新客户并在创建客户后返回客户编号。 客户编号必须是从50000开始的自动递增的唯一编号。
到目前为止,我已经成功创建了一个客户,但是我不确定应该如何生成客户编号,将其保存到数据库中,并在触发POST时将其作为成功消息显示给用户。
json下面是所需的响应;
{
"customerNumber": "50002",
"statusMessage": "Customer Created Successfully",
}
以及来自控制器和服务的以下代码段;
UserService.java
public void createUser(User user) {
if (user == null || user.getId() == null) {
throw new ResourceNotFoundException("Empty", "Missing Data Exception");
} else {
userRepository.save(user);
}
}
RegistrationController.java
@RequestMapping(method = RequestMethod.POST, value = "/users")
public void createUser(@RequestBody User user) {
userService.createUser(user);
}
用@RestController
注释包含createUser
的类,或直接在createUser
方法上添加@ResponseBody
,并将其返回类型更改为Response
;
@RestController
class Controller {
@RequestMapping(method = RequestMethod.POST, value = "/users")
public Response createUser(@RequestBody User user) {
return userService.createUser(user);
}
}
假设您在UserService
的createUser
方法将返回Response
;
public Response createUser(User user) {
if (user == null || user.getId() == null) {
throw new ResourceNotFoundException("Empty", "Missing Data Exception");
} else {
User user = userRepository.save(user);
return new Response(user.getId);
}
}
由于fooRepository.save()
始终返回成功保存的实体,只要它是来自CrudRepository
的本机save
方法CrudRepository
。
id
字段将出现在save
的结果User
实体中,以返回所需的响应类型,您需要创建这样的类,并传输上述id
;
class Response {
private String customerNumber;
private String statusMessage;
public Response(String id) {
this.customerNumber = id;
this.statusMessage = "Customer Created Successfully";
}
// getters, setters, etc
}
为了使您的控制器能够返回ID,服务层应该能够提供该信息。
换句话说,服务或存储库应该能够通知您最后添加的用户的ID。 获取该信息后,您可以在控制器中使用它。
例如,某些存储库实现在保存(和提交事务)之后使用生成的ID设置实体的ID。 如果是这种情况,您可以执行以下操作:
@RequestMapping(method = RequestMethod.POST, value = "/users")
@ResponseBody
public long createUser(@RequestBody User user){
userService.createUser(user);
return user.getId();
}
注意添加了return
子句,返回类型和@ResponseBody
批注。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.