Java Springboot如何在发布后返回响应

Java Springboot如何在发布后返回响应,java,rest,spring-boot,response,Java,Rest,Spring Boot,Response,我想创建一个新客户,并在创建客户后返回客户编号。客户编号必须是从50000开始自动递增的唯一编号 到目前为止,我已经成功创建了一个客户,但我不确定如何生成客户编号,将其保存到数据库中,并在触发帖子时将其作为成功消息显示给用户 下面是所需的响应 { "customerNumber": "50002", "statusMessage": "Customer Created Successfully", } 以及以下来自控制器和服务的代码段 UserService.java pub

我想创建一个新客户,并在创建客户后返回客户编号。客户编号必须是从50000开始自动递增的唯一编号

到目前为止,我已经成功创建了一个客户,但我不确定如何生成客户编号,将其保存到数据库中,并在触发帖子时将其作为成功消息显示给用户

下面是所需的响应

{
    "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);
    }
}
@RequestMapping(method = RequestMethod.POST, value = "/users")
public void createUser(@RequestBody User user) {
    userService.createUser(user);
}
RegistrationController.java

public void createUser(User user) {
    if (user == null || user.getId() == null) {
        throw new ResourceNotFoundException("Empty", "Missing Data Exception");
    } else {
        userRepository.save(user);
    }
}
@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);
    }
}
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);
    }
}
假设
UserService
中的
createUser
方法将返回
响应

@RestController
class Controller {

    @RequestMapping(method = RequestMethod.POST, value = "/users")
    public Response createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
}
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()
总是返回成功保存的实体,只要它是
crudepository
中的本机
save
方法

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
注释。

如何帮助@ResponseBody,返回类型是相同的。我原以为它会把它作为JSON@garg10may也许你把事情搞糊涂了。例如,
1
是一个有效的JSON。它只是一个数字,也许这就是为什么你认为它不是JSON。(在这种情况下,请检查标题以确保
内容类型
应用程序/json
或类似内容)是的,对不起:')我在想类似于spring boot已经提供的
{path:1,message:success}