springMVC的自定义参数解析器HandlerMethodArgumentResolver的使用

springMVC是比较流行的表现层框架,扩展性比较好,在项目中遇到一个问题:客户端传的参数是与公司规范报文(xml)映射的对象,规范XML是一个四层结构,节点包含四层,按照XML映射关系,将每一层映射为一个实体对象;对象的结果就是父-子-孙-曾孙。而这种结构存储到数据库时,效率极差。因此将存储到数据库的实体对象简化为两层结构,将不会出现循环的节点都放到父类中,出现循环的节点放到子类中。这种情况就需要对前端传入的复杂对象转换为简单对象。而在代码中硬编码的方式是比较low的。就利用springMVC的自定义解析器。

1、创建自定义注解

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Json {

}

2、创建自定义解析器实现HandlerMethodArgumentResolver接口,实现其中两个方法。其中supportsParameter用来判断方法形参里是否有自定义注解@Json,如果有则返回true。返回true时就会调用自定义的解析器解析方法。

3、实现resolveArgument方法,此为解析和绑定的方法。方法的形参中MethodParameter对象是方法形参的对象,NativeWebRequest是请求对象。通过这两个对象就可以获得请求参数。

获得客户端传的json对象的例子:

HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
        HttpInputMessage inputMessage = new ServletServerHttpRequest(request);
        InputStream inputStream = inputMessage.getBody();

从输入流中就可以读取客户端发送的json数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值