Пользовательская ResponseModel в Springfox/Swagger для возврата ObjectNode

Я хотел бы использовать Swagger для предоставления API-документации для моего Spring Boot API. Мне удалось заставить Springfox 2.3.0 работать, и все работает, как и ожидалось, за исключением контроллеров, возвращающих ObjectNode. Swagger пытается преобразовать возвращенный класс (ObjectNode) в JSON-представление, и результат таков:

{
    "array": true,
    "bigDecimal": true,
    "bigInteger": true,
    "binary": true,
    "boolean": true,
    "containerNode": true,
    "double": true,
    "float": true,
    "floatingPointNumber": true,
    "int": true,
    "integralNumber": true,
    "long": true,
    "missingNode": true,
    "nodeType": "ARRAY",
    "null": true,
    "number": true,
    "object": true,
    "pojo": true,
    "short": true,
    "textual": true,
    "valueNode": true
}

Теперь я знаю, что Swagger не может угадать, какие значения содержатся в JSON, который я создаю, но я хотел бы вручную добавить правильную ResponseModel в любой форме.

Контроллер выглядит примерно так:

@ApiOperation(value = "NAME", notes = "NOTES")
@RequestMapping(value = "", method = RequestMethod.GET, produces="application/json")
public ResponseEntity<ObjectNode> getComponentByIdentification(
            @ApiParam(name="customerid", required=true, value="")
            @RequestParam (required = true)
            String customerId){
    return new ResponseEntity<ObjectNode>(someService.getCustomer(customerId), HttpStatus.OK);
}

Есть ли способ предоставить Swagger собственный ResponseJSON, который показан в документации как схема модели?


person Bruce206    schedule 25.01.2016    source источник
comment
Вы имеете в виду что-то вроде этого?   -  person Vladas Maier    schedule 13.11.2018


Ответы (1)


Мы можем предоставить пользовательскую модель запроса и ответа в документации swagger API, используя аннотации swagger springfox, как показано ниже.

@PostMapping
@ApiOperation(value = "Create Article", response = ArticleDTO.class)
@ApiImplicitParams({
@ApiImplicitParam(name = "Article DTO", value = "article", required = true, dataType = "com.example.ArticleDTO", paramType = "body")})
    public Article create(@ApiIgnore Article article) {
        return articleRepository.save(article);
    }

Здесь запрос и ответ — это ArticleDTO, но они будут преобразованы Джексоном в Article, но документация покажет, что находится внутри ArticleDTO.java.

Это то, что вы ищите

person Tan mally    schedule 07.05.2019