在spring web工程中的controller可以通过@RequestParam获取request中的参数,也可以通过@PathVariable获取请求url中的参数。但是如果想要从request中获取attribute却是没有现在的注解(也许是没有找到吧),那只有自己对手,丰衣足食了。
注解定义
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestAttribute { String value() default ""; boolean required() default true; }
注解处理定义
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.springframework.core.MethodParameter; import org.springframework.web.bind.ServletRequestBindingException; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver; import path to RequestAttribute; public class RequestAttributeMethodArgumentResolver extends AbstractNamedValueMethodArgumentResolver { public RequestAttributeMethodArgumentResolver() { super(null); } @Override protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { RequestAttribute annotation = parameter.getParameterAnnotation(RequestAttribute.class); return new RequestAttributeNamedValueInfo(annotation); } @Override protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest request) throws Exception { HttpServletRequest httpServletRequest = request.getNativeRequest(HttpServletRequest.class); Object attribute = httpServletRequest.getAttribute(name); return attribute; } @Override protected void handleMissingValue(String name, MethodParameter parameter) throws ServletException { String paramType = parameter.getParameterType().getSimpleName(); String methodName = parameter.getMethod().getName(); throw new ServletRequestBindingException(String.format("call %s, Missing request attribute: %s for method parameter type[%s]", methodName, name, paramType)); } @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(RequestAttribute.class); } private class RequestAttributeNamedValueInfo extends NamedValueInfo { private RequestAttributeNamedValueInfo() { super("", false, null); } public RequestAttributeNamedValueInfo(RequestAttribute annotation) { super(annotation.value(), annotation.required(), null); } } }
接下来就要在spring的配置文件中添加配置了
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="customArgumentResolvers"> <list> <bean class="path to RequestAttributeMethodArgumentResolver" /> </list> </property> </bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
不同的工程配置方式可能有点不一样,但是大同小异都差不多
相关推荐
《SpringMVC注解详解与应用》 SpringMVC作为Java Web开发中广泛使用的轻量级框架,极大地简化了Web应用程序的构建...通过阅读"springMVC详解以及注解说明.doc",你可以获得更深入的理解和实例,进一步提升自己的技能。
java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....
例如,假设我们有一个用户对象存储在Session中,可以通过以下方式访问: ```java @RestController public class UserController { @GetMapping("/user") public User getUser(@SessionScope("user") User user) ...
- 还可以访问`@Request`, `@Session`, `@Attribute`等上下文变量。 7. **AOP中的应用** - 在切点表达式中使用SpEL,如:`@Before("@annotation(expression='#{T(com.example.MyAnnotation).value()}'")` - 在...
org.omg.CORBA 提供 OMG CORBA API 到 JavaTM 编程语言的映射,包括 ORB 类,如果已实现该类,则程序员可以使用此类作为全功能对象请求代理(Object Request Broker,ORB)。 org.omg.CORBA_2_3 CORBA_2_3 包定义对 ...
- `@PathVariable`:从URL路径中获取参数值。 - `@RequestParam`:从请求参数中获取值。 - `@ModelAttribute`:用于绑定表单数据到模型对象。 - `@ResponseBody`:将方法返回的对象直接写入HTTP响应体,通常用于返回...
java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....
java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....
org.omg.CORBA 提供 OMG CORBA API 到 JavaTM 编程语言的映射,包括 ORB 类,如果已实现该类,则程序员可以使用此类作为全功能对象请求代理(Object Request Broker,ORB)。 org.omg.CORBA_2_3 CORBA_2_3 包定义对 ...
org.omg.CORBA 提供 OMG CORBA API 到 JavaTM 编程语言的映射,包括 ORB 类,如果已实现该类,则程序员可以使用此类作为全功能对象请求代理(Object Request Broker,ORB)。 org.omg.CORBA_2_3 CORBA_2_3 包定义对 ...
org.omg.CORBA 提供 OMG CORBA API 到 JavaTM 编程语言的映射,包括 ORB 类,如果已实现该类,则程序员可以使用此类作为全功能对象请求代理(Object Request Broker,ORB)。 org.omg.CORBA_2_3 CORBA_2_3 包定义对...
spring.freemarker.request-context-attribute=request spring.freemarker.suffix=.ftl ``` 在resources文件夹下新建templates文件夹,并在其中新建index.ftl文件: ```html <!DOCTYPE html> <title></title>...
Exporting a lazily initialized bean (which implements SelfNaming and is annotated with ManagedResource annotation) gives IllegalStateException [SPR-17592] #22124 MockHttpServletRequest changes Accept-...
java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org....