您的位置:首页 > 编程语言 > Java开发

SpringBoot自定义参数注解

2015-08-27 16:33 477 查看
json类型参数解析出json对象(like:127.0.0.1:80/test/jsontest={name = testname& email = test@linecorp.com &part = test part})

首先定义注解 JsonSolver.java

1.用@Target(ElementType.PARAMETER)描述这个注解是对参数的注解,在解析参数时使用

2.用@Retention(RetentionPolicy.RUNTIME)描述这个注解要保存到运行时,并不是编译用的注解

@interface JsonSolver{
String getName() default "jsontest";
}


实现HandlerMethodArgumentResolver 接口

public class JsonArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {//有必要复写的检测方法
return parameter.getParameterAnnotation(JsonSolver.class) != null;
}

@Override
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {//有必要复写的解析方法

HttpServletRequest request = webRequest
.getNativeRequest(HttpServletRequest.class);
BufferedReader reader = request.getReader();//从http request 中读取请求字段
StringBuilder sb = new StringBuilder();

char[] buf = new char[1024];//请求最长1024
int rd;
while ((rd = reader.read(buf)) != -1) {
sb.append(buf, 0, rd);
}
//char[]->String 利用String中split(),indexof(),substring()等函数将请求字段解析成map<String,String>name:testname; email:test@linecorp.com;part:test part解析出来

jsontest = new Jsontest();//并将map中的数据存入对象
return "jsontest";
}
}

4000

然后让spring boot识别resolver

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new JsonArgumentResolver());
}
}


controller中@RequestMapping(“test”)

String testss(@JsonSolver(getName = "jsontest") Jsontest j){
model.addAttribute("json",j);
return "jsonshow";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: