问题描述
问题就是,写好了接口,发现swagger返回的example是空的,这样如果给前端看,那就根本没有数据可以参考。
症状就是这样。
而我想要的结果是
(knife4j和swagger一样)
就是在响应的例子就能看到可能返回的大概样子。
在网上搜了一堆都没有解决方案。
解决方案
问题代码如下
@PostMapping("/authtest")
@ApiOperation(value = "登录功能测试",response = Result.class)
@LogMonitorRecord(module = "登录测试", operator = "登录测试")
@ResponseBody
public Result<User> loginTest(@RequestBody LoginParam loginParam) {
return loginService.login(loginParam);
}
可以看到我指定了返回结果,为什么swagger显示不出来?
user的代码,已经定义了各种swagger注解
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value = "用户登录的实体dto",description = "用户登录的实体dto")
public class User extends BaseEntity {
//private static final long serialVersionUID=1L;
//@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value = "ID",example = "0")
private Integer id;
@ApiModelProperty(value = "用户名",example ="User")
private String username;
@ApiModelProperty(value = "密码",example = "password")
private String password;
@ApiModelProperty(value = "nickname",example = "nickname")
private String name;
/**
* 用户身份
*/
@ApiModelProperty(value = "类型",example = "1")
private String type1;
public User(String username, String password, String nickname) {
super();
this.username = username;
this.password = password;
this.name = nickname;
}
}
核心问题就是,
response = Result.class
这句话是罪魁祸首,把result的返回类型解析为泛型object,而且会直接覆盖掉你自己定义好的那个返回的type。
删掉这句话
@PostMapping("/authtest")
@ApiOperation(value = "登录功能测试")
@LogMonitorRecord(module = "登录测试", operator = "登录测试")
@ResponseBody
public Result<User> loginTest(@RequestBody LoginParam loginParam) {
return loginService.login(loginParam);
}
再次运行swagger
完美解决!