使用Java对象作为请求参数分解为swagger ui springfox中的原语

时间:2018-04-20 15:31:03

标签: swagger swagger-ui springfox

我有以下控制器代码

@GetMapping("/users")
public ResponseEntity<UserDto> getUsers(Filter filter) {
    return ResponseEntity.ok(userService.findUsers(filter));
}

Filter.java:

public class Filter {
    private Integer page;

    private Integer size;

    // Contains 2 fields: "propertyName" and "order"
    private Sort sort;

    ... getters and setters
}

网址如下:/users?page=1&size=10&sort=+firstName。所以我有一个从StringSort的自定义转换器,它运行正常。

但是,生成的swagger文档不正确:

"parameters":[  
           {  
              "name":"sort.propertyName",
              "in":"query",
              "required":false,
              "type":"string"
           },
           {  
              "name":"sort.order",
              "in":"query",
              "required":false,
              "type":"string",
              "enum":[  
                 "+",
                 "-"
              ]
           },
           {  
              "name":"page",
              "in":"query",
              "required":false,
              "type":"integer",
              "format":"int32"
           },
           {  
              "name":"size",
              "in":"query",
              "required":false,
              "type":"integer",
              "format":"int32"
           }
]

正如您所看到的,它已经细分了Sort的{​​{1}}字段,并生成了2个参数:Filtersort.propertyName。相反,我想要一个参数sort.order,其类型为sort

有没有办法实现这一目标?我尝试使用stringsort字段进行注释,但它不起作用。

1 个答案:

答案 0 :(得分:1)

您可以创建将Sort视为String

的备用类型规则
import static springfox.documentation.schema.AlternateTypeRules.*;
...
// Configure your docket bean
    new Docket(...)
         ...
         .alternateTypeRules(newRule(Sort.class, String.class)
         ...