swagger2 model不显示 找不到model @ApiModel注解 不显示问题

Swagger与@RequestBody详解
本文深入探讨了在使用Swagger时,如何正确应用@ApiModel和@RequestBody注解,以确保API文档的准确性和前后端交互的流畅性。文章指出,若在Controller中未使用@RequestBody,即使已标注@ApiModel,Swagger也可能无法正确显示model信息,造成spring与swagger的耦合问题,且错误不易察觉。同时,详细解析了@RequestBody的功能,包括处理不同content-type的内容、将JSON字符串绑定到bean以及在springBoot中使用时的注意事项。

使用swagger的 @ApiModel注解的时候有个坑 就是必须在controller 使用 @RequestBody 注解 否则无法显示models

而且不报错,此时swagger就和 spring 耦合了,而且问题难以排查,

1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。

2、通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。

3 springBoot 中 使用@requestBody注解的话, 前端传递参数时需要JSON格式的参数,而且Content-Type为:application/json;charset=UTF-8 格式

  @RequestBody的使用需要加载MappingJackson2HttpMessageConverter,但是SpringBoot的官方文档提到,这个是默认已经加载的了

除了使用 Swagger 注解之外,还可以通过以下方式让 ModelSwagger显示: #### 利用 Spring 框架的特性 在 Spring Boot 项目里,只要 Model 类被 Spring 框架扫描到并且在接口方法中作为返回类型或者请求参数使用,Swagger 就能够识别并展示该 Model。例如,在控制器的接口方法中直接返回 Model 类的实例: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; class User { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } @RestController public class UserController { @GetMapping("/user") public User getUser() { User user = new User(); user.setId(1L); user.setName("John"); return user; } } ``` 这里 `User` 类没有使用 Swagger 注解,但由于它在控制器方法中作为返回类型,Swagger 会自动识别并展示该 Model。 #### 手动配置 Swagger 可以在 Swagger 的配置类里手动添加 Model 信息。以 Springfox 为例,在 `Docket` 配置中使用 `additionalModels` 方法添加 Model 类: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.Collections; @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) .paths(PathSelectors.any()) .build() .additionalModels(new ModelRef("User")); } } ``` 这样即使 `User` 类没有使用 Swagger 注解,也会在 Swagger显示
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值