我想创建一个新客户,并在创建客户后返回客户编号。客户编号必须是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);
}
答案 0 :(得分:4)
使用createUser
注释包含@RestController
的类,或直接在@ResponseBody
方法上添加createUser
,并将其返回类型更改为Response
;
@RestController
class Controller {
@RequestMapping(method = RequestMethod.POST, value = "/users")
public Response createUser(@RequestBody User user) {
return userService.createUser(user);
}
}
假设createUser
中的UserService
方法会返回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()
始终返回成功保存的实体,只要它是来自save
的原生CrudRepository
方法。
id
字段将出现在User
生成的save
实体中,以返回您想要的响应类型,您需要创建此类,并转移前面提到的id
;
class Response {
private String customerNumber;
private String statusMessage;
public Response(String id) {
this.customerNumber = id;
this.statusMessage = "Customer Created Successfully";
}
// getters, setters, etc
}
答案 1 :(得分:4)
为使您的控制器能够返回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
注释。