福建设计网站立方米网站建设
web/
2025/10/6 6:28:48/
文章来源:
福建设计网站,立方米网站建设,怎么做网页小游戏,做网站要哪些技术背景
我们有一个接口要支持后端排序#xff0c;所以需要在请求对象里面增加两个参数#xff1a;排序字段名、排序方式#xff08;asc、desc#xff09;。
正好基础jar包中有一个类可以直接拿来用。
Data
public class OrderByItem {private String column;private Strin…背景
我们有一个接口要支持后端排序所以需要在请求对象里面增加两个参数排序字段名、排序方式asc、desc。
正好基础jar包中有一个类可以直接拿来用。
Data
public class OrderByItem {private String column;private String direction;
}但是考虑到前端使用的是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;Overridepublic boolean supportsParameter(MethodParameter parameter) {return OrderByItem.class.isAssignableFrom(parameter.getParameterType());}Overridepublic 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 orderOrderByItem orderByItem new OrderByItem();orderByItem.setColumn(prop);orderByItem.setDirection(order);return orderByItem;}}注册OrderItemHandlerMethodArgumentResolver
Configuration
public class WebMvcConfig implements WebMvcConfigurer {Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new OrderItemHandlerMethodArgumentResolver());}
}这里虽然解决了参数接收的问题但是Swagger生成的文档参数名还是column和direction。我们需要改成prop和order。
由于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();}Beanpublic 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代替。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87779.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!