但是考虑到前端使用的是element框架,默认使用 prop 来定义排序字段,使用 order 来定义排序方式。

因此,考虑使用这两个属性来接受排序字段。但是仍然用 OrderByItem 这个类来接收参数。

为啥不重新定义一个类呢?

因为 OrderByItem 这个类还有配套的工具类,用来进行相关的转换。所以为了复用这个工具类,就有了这个奇葩需求——我要用 OrderByItem 这个类型来接受参数,但是这两个参数在Swagger中要展示成另外的名字,前端也需要用另外的名字来传参。

老实说,直接用 column direction 没啥大问题。因此我们不去讨论这样做是否合理,姑且看如果我想实现类似的效果应该怎么处理。

JSON格式

如果 OrderByItem 作为JSON格式使用,那么就很简单了:

@Data
public class OrderByItem {
    @JsonProperty("prop")
	private String column;
    @JsonProperty("order")
    private String direction;

这里直接使用JsonProperty注解即可。

非JSON格式

如果不是JSON格式,事情会变得麻烦一点。

首先是要解决参数接收的问题,这里可以定义一个HandlerMethodArgumentResolver

public static class OrderItemHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
        private static final String ORDER = "order";
        private static final String ORDER_DESC = "descending";
        private static final String ORDER_ASC = "ascending";
        private static final String PROP = "prop";
        @Override
        public boolean supportsParameter(MethodParameter parameter) {
            return OrderByItem.class.isAssignableFrom(parameter.getParameterType());
        @Override
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
            String prop = webRequest.getParameter(PROP);
            if (StringUtils.isBlank(prop)) {
                return null;
            String order = webRequest.getParameter(ORDER);
            // validate order
          	OrderByItem orderByItem = new OrderByItem();
			orderByItem.setColumn(prop);
		    orderByItem.setDirection(order);
            return orderByItem;

注册OrderItemHandlerMethodArgumentResolver:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
       registry.addConverter(new OrderItemHandlerMethodArgumentResolver());

这里虽然解决了参数接收的问题,但是Swagger生成的文档参数名还是columndirection。我们需要改成proporder

由于OrderByItem是jar包中的类,无法修改源码,所以不能直接使用ApiModelProperty这个注解。

好在Swagger提供了一个“替身”功能,我们需要先定义一个替身类:

@Data
@ApiModel("排序")
public static class OrderRequest {
    @ApiModelProperty("字段名称")
    private String prop;
    @ApiModelProperty("排序方式:descending倒序,ascending:正序")
    private String order;

然后使用替身:

@Configuration
public class SwaggerConfig {
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("test")
                .description("test")
                .version("1.0")
                .build();
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .directModelSubstitute(OrderByItem.class, OrderRequest.class);

这样做,当Swagger显示OrderByItem类时,就会用OrderByItem代替。

前后端分离时,前端对接口都需要有接口文档,根据接口文档写接口方法,看文档还要去写接口方法基本都是粘贴复制,把这个机械的任务解除了 我们可以根据swagger接口文档,前端来自动生成接口方法 根据swagger.json文件来npm 生成接口方法 接口信息都截去了 原创文章 60获赞 17访问量 21万+ <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> 1 @API 作用于类,放置于controller的一个类上,标志这个类是Swagger资源。资源影响Swagger的根文档、资源列表和该特定资源的API声明。swagger将只包含和声明使用@Api注释的类,而忽略其他资源(servlet等) 1.1 参数 参数
主要是为了让一个实体可以用于不同的接口展示不同的字段,减少dto的数量,但是不宜过度使用,不然代码就被注解占满了 @ApiGroupProperty(value={GroupsUser.Update.class},description="")用于给Model字段分组,value控制所属组,description可以设置不同的字段描述 @ApiGroupProperties(value = {@ApiGroupProperty({)}})可以包含多个@ApiGroupProperty以便给不同分组的Mo
1. 在Swagger的API文档找到相应的请求接口。 2. 点击该接口,在右侧的参数列表找到带有@RequestBody注解的参数。 3. 点击参数旁边的“Model”按钮,以展开请求参数的模型。 4. 在模型填写要发送的请求参数数据。可以使用JSON格式来填写。 5. 点击“Try it out”按钮来发送请求并查看响应结果。 注意事项: - 确保请求参数的数据类型和格式与接口定义一致。 - 如果请求参数是复杂对象,可以使用嵌套的JSON格式来填写。 - 如果接口定义了其他类型的参数(例如路径参数或查询参数),也需要相应地填写。 通过以上步骤,你可以在Swagger测试带有@RequestBody参数的请求,并查看相应的响应结果。
第二种方法无法处理如字符串为123abc的情况,但是如果改为使用一元运算符 '+' 来进行转换则是可行的,如: let str = '123abc' !isNaN(+str) 报的是false,不是数字 对JS不熟悉,还向楼主请教一下这种方法是否可行?
JavaScript 判断是否为数字的几种方式 代码君.: 实际试了一下isFinite和Number.isFinite都不会报错,而且js也不是编译型语言啊,你用的ts?