【问题标题】:ModelAttribute not visible in SwaggerModelAttribute 在 Swagger 中不可见
【发布时间】:2020-10-21 17:21:47
【问题描述】:

我正在使用 Spring 2.3 并使用 swagged 导入

    implementation('io.springfox:springfox-swagger2:2.8.0')
    implementation('io.springfox:springfox-swagger-ui:2.8.0')

我想从 UI 接受分页参数,模型是

@Immutable
@JsonSerialize(as = ImmPaginationParameters.class)
@JsonDeserialize(as = ImmPaginationParameters.class)
public interface PaginationParameters {
    Integer getLimit();
    Integer getOffset();
}

在控制器中,我将方法声明为

    @GetMapping("/preview")
    @NonNull
    ResponseEntity<List<SomeDto>> getPreviewResults(@PathVariable final String projectId,
                                                    @ModelAttribute final PaginationParameters params) {

但是,Swagger UI 中并没有反映出这一点。

我尝试将其转换为帖子映射,并在 PaginationParameters 前面也添加了 @Valid,但同样的事情。检查了 API 文档,再次没有分页参数的迹象。我检查了What is @ModelAttribute in Spring MVC? 的帖子,这种定义 modelAttribute 的方式看起来就足够了。不确定我必须在 PaginationParams 类中声明一些不同的东西。

【问题讨论】:

    标签: spring spring-boot swagger swagger-ui springfox


    【解决方案1】:

    尝试使用@RequestBody 和@ApiParam 而不是@ModelAttribute,在传递请求正文时也使用@Postmapping:-

    @PostMapping("/preview")
    @NonNull
    ResponseEntity<List<SomeDto>> getPreviewResults(@ApiParam @PathVariable final String projectId,
                                                    @ApiParam @RequestBody final PaginationParameters params) {
    

    【讨论】:

    • 但是@Gaurav 这实际上是一个发出请求的用例,所以理想情况下我不应该将其转换为发布。有没有办法用 ModelAttribute 实现同样的效果?
    • 每当我们发出请求并且请求有正文时,我们应该使用 PostMapping,如果是 REST API,最佳实践是使用 RequestBody 映射请求对象
    • 是的,这就是为什么我希望 ModelAttribute 而不是 RequestBody 以常规方式保留 GET 请求。
    • 使用 GET 它不适用于 swagger,您必须将其更改为 POST。
    • 确实如此,我在上面发布了解决方案。不支持不可变 :(
    【解决方案2】:

    原来 ModelAttribute 不适用于 Immutable 类。改成lombok后就可以了

    @Data
    public class PaginationParameters {
        private Integer limit;
        private Integer offset;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-10-04
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      相关资源
      最近更新 更多