IDEA配置Swagger+统一返回数据嵌套展示信息(不被拦截器拦截处理)

1. 首先配置Swagger流程请看:

IDEA集成Swagger-CSDN博客

配置好Swagger后的页面其实可以正常展示我们的接口以及入参和出参数据了

但是我们返回给前端的数据需要统一做一下处理,那么这是需要给response包装一层通用的数据格式

例如:

这样前端同学可以根据响应数据获取相应的数据结果集

我们真正需要处理的数据可以放在data里面返回,那么data里面数据处理后就可以展示在Swagger接口Api的页面上了,这样前后端都能清楚地get到数据的指向含义,话不多说上代码~

2. Swagger展示response返回的嵌套的数据集信息及注释信息

使用泛型指定的Swagger,可以展示data的数据内部文档注释


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

@Data
@ApiModel(value = "返回数据结果集")
public class Result<T> implements Serializable {

    @ApiModelProperty(value = "状态码", example = "200")
    private int code;

    @ApiModelProperty(value = "返回消息")
    private String msg;

    @ApiModelProperty(value = "返回数据")
    private T data;

    // 修改构造函数,使其可以接受int, java.lang.String, T作为参数
    public Result(int code, String message, T data) {
        this.code = code;
        this.msg = message;
        this.data = data;
    }

    public static Result suc(Object data){
        return new Result(200, "操作成功", data);
    }

    public static Result fail(){
        return new Result(400, "操作失败", null);
    }

}

控制器的代码


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jx.wms.common.PageParam;
import com.jx.wms.common.Result;
import com.jx.wms.entity.User;
import com.jx.wms.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author JL
 * @since 2023-10-25
 */
@RestController
@RequestMapping("/user")
@Api(value = "Controller", tags = { "用户相关接口" })
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/list")
    public List<User> list(){
        return userService.list();
    }


    @PostMapping("/listPage")
    @ApiOperation(value = "分页数据接口")
    public Result<IPage<User>> listPage(@RequestBody PageParam page){
        Page<User> pageUser = new Page(page.getPageNum(), page.getPageSize());
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getName, page.getParam().get("name"));
        IPage<User> userResult = userService.page(pageUser, queryWrapper);
        return Result.suc(userResult);
    }
}

返回数据的data里的嵌套User实体(正常来讲是用Vo,这里先略)


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author JL
 * @since 2023-12-7
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "用户类Model")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;


    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "ID主键")
    private Integer id;


    @ApiModelProperty(value = "账号")
    private String number;


    @ApiModelProperty(value = "名字")
    private String name;


    @ApiModelProperty(value = "密码")
    private String password;


    @ApiModelProperty(value = "年龄")
    private Integer age;


    @ApiModelProperty(value = "性别:1女 2男")
    private Integer sex;


    @ApiModelProperty(value = "电话")
    private String phone;


    @ApiModelProperty(value = "角色:0超级管理员,1管理员,2普通账号")
    private Integer roleId;


    @ApiModelProperty(value = "是否有效:Y有效  其他无效")
    private String isValid;


}

最后启动项目后访问Swagger我们可以发现返回数据data里面是有嵌套数据并带有注释信息的

通过泛型,即使是多个对象嵌套也能展示在Swagger Api页面上,这就是Swagger接口文档的使用

3. swagger 如何不被拦截器拦截,直接访问接口文档,可添加如下配置:

具体代码如下:

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception
    {
        // 注解标记允许匿名访问的url
        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
        permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());

        httpSecurity
                // CSRF禁用,因为不使用session
                .csrf().disable()
                // 禁用HTTP响应标头
                .headers().cacheControl().disable().and()
                // 认证失败处理类
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
                // 基于token,所以不需要session
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                // 过滤请求
                .authorizeRequests()
                // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                .antMatchers("/login", "/register", "/captchaImage","/geb/model/callback", "/geb/conversion/downloadFile","/geb/task/callback","/geb/log/view","/send-email-code/*","/system/user/profile/forget-password").permitAll()
                // 静态资源,可匿名访问
                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
        // 添加Logout filter
        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
        // 添加JWT filter
        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
        // 添加CORS filter
        httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
        httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
    }

以此记录~

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值