SpringBoot自定义参数注解

json类型参数解析出json对象(like:127.0.0.1:80/test/jsontest={name = testname& email = [email protected] &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()等函数将请求字段解析成mapname:testname; email:[email protected];part:test part解析出来

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

然后让spring boot识别resolver

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

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

controller中@RequestMapping(“test”)

String testss(@JsonSolver(getName = "jsontest") Jsontest j){
        model.addAttribute("json",j);
        return "jsonshow";
    }

你可能感兴趣的:(spring)