Java:使⽤属性注解对应第三⽅接⼝的参数名称
背景
在开发过程中,如果第三⽅接⼝参数的命名遵循⼀定的规范,我⽅在封装请求体时会⽐较⽅便和整洁,通常不需要过多的注释。但是如果第三⽅接⼝的参数命名⾮常随意呢?我们知道,如果是POST 请求,我们可以使⽤ JSONField 。但如果是让我们⾃⼰不依赖 fastjson 来完成⼀个GET请求的字符串拼接呢?
⽐如:
/api/addUser?NAME=xiaoguaiguai&agenumber=78&sex_flag=0&ji_Guan=东北那旮
它揉合了多种命名规则并且还包含拼⾳,这个时候你应该如何保证⾃⼰的代码是整洁的呢?
1.定义属性注解
由于属性对应的参数名称⾮常随意,我们准备⼿动记录它,这样呢,我们就需要⼀个注解:
import*;
@Retention(RetentionPolicy.RUNTIME)
@Target(value={ElementType.FIELD})
@Documented
@Inherited
public@interface ThirdApiParamName {
/**
* 参数名称
*
* @return
*/
String value();
}
2. 对应参数信息体添加属性注解
注解使⽤时⾮常简单,⽐如我们有⼀个UserAddDTO.class,直接进⾏标记。
@Data
public class UserAddDTO{
/**
* ⽤户名称
*/
@ThirdApiParamName("NAME")
private String name;
/**
* ⽤户年龄
*/
@ThirdApiParamName("agenumber")
private int age;
/**
* 性别标志
* 0:⼥
* 1:男
*/
@ThirdApiParamName("sex_flag")
private int sexFlag;
/**
* 籍贯
*/
@ThirdApiParamName("ji_Guan")
private String nativePlace;
}
这样写有什么好处呢?假如另外⼀个⼈,从⽇志看到了打印的请求的 url 字符串,发现了⼀个诡异的参数叫agenumber,他就开
始Ctrl+Shift+F搜索,正好发现了这个类,⼀看你的注释,他就能明⽩:啊,原来是年龄,他把两个单词写⼀块了。
3.Java反射解析注解
下⾯我们使⽤反射机制,获取到对应的属性上的注解中填写的值以及属性的值,进⾏拼接。这⼀部分我们可以写在⼯具类⾥,当然如果你DDD,你可以有⾃⼰的考量,我这⾥只给出函数体:
public static String fulfilledUrlWithParams(String urlPrefix, Object paramObject){
try{
Class<?> aClass = Class();
Field[] declaredFields = DeclaredFields();
StringBuilder stringBuffer =new StringBuilder(urlPrefix);
stringBuffer.append("?");
StringJoiner paramStringJoiner =new StringJoiner("&");
for(Field declaredField : declaredFields){
// 对应每个属性,获取它对应的参数的名称
declaredField.setAccessible(true);
Object valueObj = (paramObject);
if(valueObj ==null|| StringUtils.String())){
continue;
}
ThirdApiParamName paramName= Annotation(ThirdApiParamName.class);
if(paramName==null){
continue;
}
paramStringJoiner.add(paramName.value()+"="+ valueObj);
}
stringBuffer.String());
String();
}catch(Exception e){
fastjson怎么用e.printStackTrace();
return"";
}
}
这样,我们就把⼀个毫⽆命名规律的第三⽅接⼝参数规范化了。这样,我们在封装好了整个请求服务后,开发组内部就是⽤我们⾃⼰写的服务了,⽽不是各⾃去⾯对第三⽅混乱的接⼝参数。
其实这个设计并不难想到,只要你熟悉门⾯模式、代理模式、适配器模式,你会很⾃然想到要添加⼀个中间层,以屏蔽⼀些⿇烦的细节。其实,编程中涉及到设计相关的内容,⼤部分都是中间层的艺术。
思考题
接下来,留⼀个思考题给每⼀位读者:
在你的项⽬中,如果是遇到同事之间的接⼝调⽤,对⽅参数命名不规范,你应该怎么做呢?
欢迎你在评论区留⾔,和其他读者进⾏讨论。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论