@RestController
public class TestController {
@GetMapping(value = "/aa")
public void aa(User u1){
System.out.println("=========="+u1);
}
}
public class User {
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
http://localhost:8080/aa?u1=hhh:222
正常情况下,我们这样传给一个user对象到后台是空的
接下来我们自定义参数解析器,并把自定义的参数解析器添加到mvc底层配置中
/**
* 自定义参数解析器
*/
public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
/**
* 判断参数是否支持解析
* @param parameter
* @return
*/
@Override
public boolean supportsParameter(MethodParameter parameter) {
//判断参数的类型是不是User这个类 如果是 那么会进入resolveArgument方法
return parameter.getParameterType().equals(User.class);
}
/**
* 解析参数
* @param parameter
* @param mavContainer
* @param webRequest
* @param binderFactory
* @return
* @throws Exception
*/
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
//获取方法的参数 http://localhost:8080/aa?u1=hhh:222
String str = webRequest.getParameter("u1");
//按照:分割开
String []sp=str.split(":");
User user=new User();
user.setName(sp[0]);
user.setPwd(sp[1]);
return user;
}
}
@Configuration
public class TestConfig implements WebMvcConfigurer {
/**
* 添加参数解析器
* @param resolvers
*/
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
//把自定义的参数解析器 添加进去
resolvers.add(new MyHandlerMethodArgumentResolver());
}
}
接下来再次访问,可以看到参数被解析了,并放入了对象中