@Controller public class MyTest { @RequestMapping(value = "/heheda",method = RequestMethod.POST) @ResponseBody public String test(@mytest myUser str){ System.out.println("用戶名是 "+str.getName()+"\t用戶密碼是 "+str.getPassword()); return str.toString(); } @RequestMapping(value = "/mapping",method = RequestMethod.POST) @ResponseBody public String test1(myUser str){ System.out.println("用戶名1是 "+str.getName()+"\t用戶密碼是1 "+str.getPassword()); return str.toString(); } @RequestMapping(value = "/user",method = RequestMethod.POST) @ResponseBody public String test1(@LoginUser Users user){ System.out.println("用戶名2是 "+user.getName()+"\t用戶密碼是2 "+user.getPassword()); return user.toString(); } } public class MyTestHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { public MyTestHandlerMethodArgumentResolver() { super(); } /** * 是否支持參數 * @param methodParameter * @return */ @Override public boolean supportsParameter(MethodParameter methodParameter) { System.out.println("hasParameterAnnotation "+methodParameter.hasParameterAnnotation(mytest.class)+"\t是否為子類:"+methodParameter.getParameterType().isAssignableFrom(myUser.class)); return methodParameter.hasParameterAnnotation(mytest.class)&&methodParameter.getParameterType().isAssignableFrom(myUser.class); } /** * 解析參數 * @param methodParameter * @param modelAndViewContainer * @param nativeWebRequest * @param webDataBinderFactory * @return * @throws Exception */ @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { myUser user=new myUser(); user.setName("login"); user.setPassword("1234"); return user; } } 注解 @Retention(RetentionPolicy.RUNTIME) @Target(value = ElementType.PARAMETER) public @interface mytest { String name() default "zhao"; } 配置 <!-- 使用XML格式輸出數據 --> <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> <constructor-arg> <bean class="org.springframework.oxm.xstream.XStreamMarshaller"> <property name="streamDriver"> <bean class="com.thoughtworks.xstream.io.xml.StaxDriver"/> </property> <property name="annotatedClasses"> <list> </list> </property> </bean> </constructor-arg> <property name="supportedMediaTypes" value="application/xml"></property> </bean> </mvc:message-converters> <mvc:argument-resolvers> <!--登錄用戶自動注入--> <bean class="com.security.LoginUserMethodArgumentResolver"/> <bean class="com.test.aop.MyTestHandlerMethodArgumentResolver"/> </mvc:argument-resolvers> </mvc:annotation-driven> @Configuration public abstract class webconfig implements WebMvcConfigurer { public webconfig() { super(); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> list) { list.add(myTestHandlerMethodArgumentResolver()); } @Bean public MyTestHandlerMethodArgumentResolver myTestHandlerMethodArgumentResolver(){ return new MyTestHandlerMethodArgumentResolver(); } }
優化可以設置一個攔截器將登陸信息設置到解析器中
參考: https://www.zhulou.net/post/5167.html