springMvc 常用接口HandlerMethodArgumentResolver使用
来源:互联网 发布:js购物车加减计算总价 编辑:程序博客网 时间:2024/04/28 12:36
之前写的http传输json进行服务端接口与客户端对接,以及restful实现这篇文章里提到关于json传输接收,我是在controller里来做json解析处理,如果每个地方都要用到json解析,那每个地方都这么写就显得代码很乱,当然也可以抽取到一个工具类里,但又觉得不优雅,假如我们有这么个注解@Json2Bean在controller参数对象中就能自动帮我们把json解析为我们要对象那将多美好呀。那么这里将应用springmvc HandlerMethodArgumentResolver这个接口以及自定义注解来实现一个关于json的解析;
实现步骤如下:
1)自定义注解:
package com.cwh.springmvc.Annotation;import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({java.lang.annotation.ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Json2Bean {}2)利用 HandlerMethodArgumentResolver接口实现数据绑定:
package com.cwh.springmvc.resolver;import java.io.BufferedInputStream;import java.io.BufferedReader;import javax.servlet.http.HttpServletRequest;import net.sf.json.JSONObject;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 com.cwh.springmvc.Annotation.Json2Bean;public class Json2BeanArgumentResolver implements HandlerMethodArgumentResolver{@Overridepublic boolean supportsParameter(MethodParameter paramMethodParameter) {// 仅对有fastjson注解有效return paramMethodParameter.hasParameterAnnotation(Json2Bean.class);}@Overridepublic Object resolveArgument(MethodParameter paramMethodParameter,ModelAndViewContainer paramModelAndViewContainer,NativeWebRequest paramNativeWebRequest,WebDataBinderFactory paramWebDataBinderFactory) throws Exception {HttpServletRequest request = paramNativeWebRequest.getNativeRequest(HttpServletRequest.class); // content-type不是json的不处理 if (!request.getContentType().contains("application/json")) { return null; } StringBuffer str = new StringBuffer(); try { BufferedInputStream in = new BufferedInputStream(request.getInputStream()); int i; char c; while ((i=in.read())!=-1) { c=(char)i; str.append(c); } }catch (Exception ex) { ex.printStackTrace(); } JSONObject obj= JSONObject.fromObject(str.toString()); return JSONObject.toBean(obj,paramMethodParameter.getParameterType()); }}3)springmvc配置文件配置:
<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="com.cwh.springmvc.resolver.Json2BeanArgumentResolver"/> </mvc:argument-resolvers> </mvc:annotation-driven>注:这个<mvc:annotation-driven>标签是3.1版本的
4)controller实现应用上@json2Bean这个注解:
@RequestMapping("/getUserByName")public @ResponseBody User getUserByName(@Json2Bean User userform){System.out.println(userform);String name = userform.getUsername();User user= userservice.getUserByName(name);return user;}5)模拟发送一笔json请求测试:
@Testpublic void HttpPostData() { try { HttpClient httpclient = new DefaultHttpClient(); String uri = "http://localhost:8080/springMVC/user/getUserByName"; HttpPost httppost = new HttpPost(uri); //添加http头信息 httppost.addHeader("Content-Type", "application/json"); JSONObject obj = new JSONObject(); obj.put("username", "cwh"); obj.put("password", "password"); httppost.setEntity(new StringEntity(obj.toString())); HttpResponse response; response = httpclient.execute(httppost); //检验状态码,如果成功接收数据 int code = response.getStatusLine().getStatusCode(); System.out.println(code+"code"); if (code == 200) { String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""} obj= JSONObject.fromObject(rev); System.out.println(obj.get("username")); User user = (User)JSONObject.toBean(obj,User.class); System.out.println("返回数据==="+user.toString()); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }6)测试结果:
ok!这样服务端看起来代码就简洁多了
0 0
- springMvc 常用接口HandlerMethodArgumentResolver使用
- SpringMVC杂记(十七) HandlerMethodArgumentResolver接口应用example
- SpringMVC杂记(十七) HandlerMethodArgumentResolver接口应用example
- SpringMVC重要接口(一)HandlerMethodArgumentResolver
- SpringMVC重要接口(一)HandlerMethodArgumentResolver
- SpringMVC HandlerMethodArgumentResolver解读
- 使用HandlerMethodArgumentResolver接口自定义Spring MVC的参数接受规则
- 通过实现HandlerMethodArgumentResolver接口,给springMvc的Controller的方法注入自定义参数
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- springmvc的常用接口
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
- mysql 中 and 和 or 的用法
- nyoj117——求逆序数
- [git] warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF
- 弹出层 layer !!!常用
- 仿途牛旅游详情页面 置顶功能
- springMvc 常用接口HandlerMethodArgumentResolver使用
- js(replace)的使用(全部替换,变量替换)
- java设计模式概述
- oracle 分页问题(先排序再分页)
- Linux常用命令
- zoj1113
- 浅析机顶盒的节目控制
- @Configuration 和 @Bean
- CSS学习总结(更新中。。。)