簡體   English   中英

如何在 Mono / Flux 中添加自定義響應 Spring web 通量?

[英]How to add Custom response in Mono / Flux in Spring web flux?

我是Spring web flux的新手,正在尋找一種在Mono響應中添加自定義 object 的方法。

我需要做出這樣的回應:

{ 
  "success" : "true",
  "data": "<Some Object> or any constant value",
  "error": "If any exception occurs"
}

我嘗試將ResponseEntity class 與HttpStatus object 一起使用,如下所示:

@PostMapping("/v1/cat")
public Mono<ResponseEntity<Long>> createCategory(@RequestBody Categories services) throws Exception {
    return Mono.just(categoriesService.addNewCategory(services)).map(result -> new ResponseEntity<>(result
    , HttpStatus.OK)).defaultIfEmpty(new ResponseEntity<>(HttpStatus.BAD_REQUEST));
}

我得到的響應是15944280045即長值但沒有HttpStatus.OK 如何在所需的響應 object 中調整上述響應?

任何幫助都是不言而喻的。

你可以這樣實現:

我假設categoriesService.addNewCategory返回_id , null 或拋出Exception

@PostMapping("/v1/cat")
public Mono<ResponseEntity<ResponseDto<String>>> createCategory(@RequestBody Categories services) throws Exception {
    return Mono
            .just(services)
            .map(categoriesService::addNewCategory)
            .map(result -> new ResponseEntity<>(ResponseDto.success(result), HttpStatus.OK))
            //Couldn't reproduce
            //.defaultIfEmpty(new ResponseEntity<>(ResponseDto.fail("not found", String.class), HttpStatus.BAD_REQUEST))
            .onErrorResume(
                throwable -> Mono.just(new ResponseEntity<>(ResponseDto.fail(throwable.getMessage(), 
                    String.class), HttpStatus.BAD_REQUEST)));
}

成功( HTTP 成功

{
  "success": true,
  "data": "5f09f5ac102c3c32c4203d8c",
  "error": null
}

出錯時

{
  "success": false,
  "data": null,
  "error": "Cat4 already exists"
}

對 class 的響應 D

public class ResponseDto<T> {

    private Boolean success;
    private T data;
    private String error;
    
    private ResponseDto(Boolean success, T data, String error) {
        this.success = success;
        this.data = data;
        this.error = error;
    }
    
    public static <T> ResponseDto<T> success(T data) {
        return new ResponseDto<T>(true, data, null);
    }
    
    @SuppressWarnings("unchecked")
    public static <T, S> ResponseDto<T> fail(String error, S clazz) {
        return (ResponseDto<T>) new ResponseDto<S>(false, null, error);
    }
    
    public Boolean getSuccess() {
        return success;
    }
    public void setSuccess(Boolean success) {
        this.success = success;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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