
1.新建注解类
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PersonValue {
/**
* Alias for {@link #name}.
*/
@AliasFor("name")
String value() default "";
/**
* The name of the request parameter to bind to.
* @since 4.2
*/
@AliasFor("value")
String name() default "";
/**
* Whether the parameter is required.
* <p>Defaults to {@code true}, leading to an exception being thrown
* if the parameter is missing in the request. Switch this to
* {@code false} if you prefer a {@code null} value if the parameter is
* not present in the request.
* <p>Alternatively, provide a {@link #defaultValue}, which implicitly
* sets this flag to {@code false}.
*/
boolean required() default true;
/**
* The default value to use as a fallback when the request parameter is
* not provided or has an empty value.
* <p>Supplying a default value implicitly sets {@link #required} to
* {@code false}.
*/
String defaultValue() default ValueConstants.DEFAULT_NONE;
}
2. 实现HandlerMethodArgumentResolver
接口
public class PersonValueMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
//判断参数是否具有目标注解
return parameter.hasParameterAnnotation( PersonValue.class); }
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
try {
HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class);
if (servletRequest != null) {
String token = WebUtils.getCookie(servletRequest,"token").getValue();
//从Cooke中解析出person对象
return JWTUtil.getPerson(token);
}
} catch (Exception e) {
return null;
}
return null;
}
}
3.启用配置
<mvc:annotation-driven >
<mvc:argument-resolvers>
<bean class="com.xxxx.xxx.xxxx.PersonValueMethodArgumentResolver"></bean>
</mvc:argument-resolvers>
4.应用
public @ResponseBody Response doEditPass(@PersonValue person,
@RequestBody @Valid PwdEditCmd pwdEditCmd,
HttpServletResponse response, HttpServletRequest request) {
...
}