簡體   English   中英

Springboot如何在POST之后返回響應

[英]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);
    }
}

假設您在UserServicecreateUser方法將返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM