Springboot如何在POST后返回响应

时间:2018-01-10 03:08:39

标签: java rest spring-boot response

我想创建一个新客户,并在创建客户后返回客户编号。客户编号必须是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);
}

2 个答案:

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