Как добавить формат ответа об ошибке в Swagger для проекта Spring-boot, основанного на webflux - PullRequest
0 голосов
/ 06 апреля 2019

Я не знаю, как добавить формат ответа об ошибке в Swagger для проекта Spring-boot, основанного на webflux.Во всех уроках, которые я прочитал, я только нашел, как добавить формат ответа 200, но мне также нужно показать формат ошибки (map<String, Object>), сгенерированной при весенней загрузке.Любые идеи, пожалуйста.

1 Ответ

0 голосов
/ 06 апреля 2019

Как вы указали сами, полезная нагрузка ответа по умолчанию - Map (в частности, Map<String, Object>, см. DefaultErrorAttributes.getErrorAttributes (...) ).Указав это как ответ об ошибке, вы не получите того, что хотите.

Вместо этого вы можете указать полезную нагрузку ответа об ошибке, создав class с полями карты ошибок по умолчанию.

public class SpringErrorPayload {
    public long timestamp;
    public int status;
    public String error;
    public String exception;
    public String message;
    public String path;

    public SpringErrorPayload(long timestamp, int status, String error, String exception, String message, String path) {
        this.timestamp = timestamp;
        this.status = status;
        this.error = error;
        this.exception = exception;
        this.message = message;
        this.path = path;
    }

    //removed getters and setters
}

Затем, добавив class к атрибуту response @ApiResponse вашего метода, вы получите желаемый результат

@ApiOperation("Create new something")
@ApiResponses(value = {
        @ApiResponse(code = 201, message = "New something successfully created"),
        @ApiResponse(code = 400, message = "Bad request, adjust before retrying", response = SpringErrorPayload.class),
        @ApiResponse(code = 500, message = "Internal Server Error", response = SpringErrorPayload.class )
})
@ResponseStatus(CREATED)
public SomethingPayload createSomething(@Valid @RequestBody final NewSomethingPayload newSomethingPayload) {
    return somethingService.createSomething(newSomethingPayload);
}

Swagger result

...