SpringMVC HandlerMethodArgumentResolver解读
2017-09-09 13:36
441 查看
HandlerMethodArgumentResolver:将请求报文绑定到处理方法形参的策略接口
我们也可以实现自己的HandlerMethodArgumentResolver:
Controller
在SpringMVC添加如下配置:
测试:
我们也可以是使用
/** * 策略模式接口:用于在给定的请求的上下文中将方法参数解析为参数值 */ public interface HandlerMethodArgumentResolver { /** * 该处理程序是否支持给定的方法参数类型(只有返回true才回去调用 resolveArgument) */ boolean supportsParameter(MethodParameter parameter); /** * 将方法参数从给定的请求中解析为参数值 * */ Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception; }
我们也可以实现自己的HandlerMethodArgumentResolver:
package cn.bjut.entity; import org.springframework.core.MethodParameter; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; import java.util.Arrays; public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { System.out.println(parameter.getMethod()); System.out.println(parameter.getParameterType()); System.out.println(Arrays.toString(parameter.getMethodAnnotations())); return parameter.getParameterType().equals(Person.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { mavContainer.setRequestHandled(true); String name = webRequest.getParameter("name"); Integer age = Integer.parseInt(webRequest.getParameter("age")); return new Person(name, age); } }
Controller
@ResponseBody @RequestMapping(value = "/demo2", method = RequestMethod.GET) public String getPerson(Person person) { return person.toString(); }
在SpringMVC添加如下配置:
<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="cn.bjut.entity.MyHandlerMethodArgumentResolver"/> </mvc:argument-resolvers> </mvc:annotation-driven>
测试:
F:\>curl "http://localhost:8080/SpringMVCDemo/demo2?name=lgh&age=25" Person{name='lgh', age=25}
我们也可以是使用
HandlerMethodReturnValueHandler来完成JSON到JavaBean的转换。
package cn.bjut.entity; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.core.MethodParameter; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.getParameterType().equals(Person.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { mavContainer.setRequestHandled(true); HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); ServletInputStream inputStream = request.getInputStream(); byte[] buffer = new byte[inputStream.available()]; inputStream.read(buffer); String str = new String(buffer, "UTF-8"); ObjectMapper objectMapper = new ObjectMapper(); Person person = objectMapper.readValue(str, Person.class); inputStream.close(); return person; } }
@ResponseBody @RequestMapping(value = "/demo2", method = RequestMethod.POST, consumes = "application/json;charset=UTF-8") public String getPerson(Person person) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.writeValueAsString(person); }
相关文章推荐
- SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题
- SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题
- SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题
- Spring MVC HandlerMethodArgumentResolver 自定义参数解析器
- SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题
- SpringMVC HandlerMethodReturnValueHandler解读
- SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
- SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
- [org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver]-[DEBUG] Re
- spring 自定参数解析器(HandlerMethodArgumentResolver)
- SpringMVC之HandlerMethodArgumentResolver和<mvc:argument-resolvers>
- 自定义数据绑定---HandlerMethodArgumentResolver
- SpringMVC 使用HandlerMethodArgumentResolver自定义解析器实现请求数据绑定方法入参
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- springMVC custom PrefixArgumentResolver
- handlermethodargumentresolver
- apache HttpClients实例,传入json对象。对应的springMvc通过HandlerMethodArgumentResolver解析两个对象绑定
- HandlerMethodArgumentResolver数据绑定无效
- Spring MVC PropertiesMethodNameResolver example
- springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)