spring mvc 接受多对象的处置
spring mvc 接受多对象的处理
spring mvc感觉非常好用,尤其是对接收对象參数的自己主动绑定非常简便,但对于同一时候传多个对象时有些困扰。
同一时候项目并没有直接使用spring的formtag。
从网上学来的多对象传值。自己优化了下,原文找不到出处了这里记录下。
首先声明一个注解类,用于对传值对象的声明
/**
* 处理spring mvc 对象绑定注解
*
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBean {
String value() default "_def_param_name";
}
然后是一个对WebArgumentResolver的实现类,对象參数绑定主要是这个类来处理
/**
* 对象传值的參数绑定处理
*
*/
public class BeanArgumentResolver implements WebArgumentResolver {
@SuppressWarnings("rawtypes")
public Object resolveArgument(MethodParameter param, NativeWebRequest request){
RequestBean requestBean = param.getParameterAnnotation(RequestBean.class);
try{
if (requestBean != null) {
String _param = requestBean.value();
if (_param.equals("_def_param_name")) {
_param = param.getParameterName();
}
Class clazz = param.getParameterType();
Object object = clazz.newInstance();//依据參数类型实例化对象
HashMap<String, String[]> paramsMap = new HashMap<String, String[]>();
Iterator<String> itor = request.getParameterNames();//获取全部的请求參数
while (itor.hasNext()) {
String webParam = (String) itor.next();//迭代获取请求參数
String[] webValue = request.getParameterValues(webParam);//获取请求參数相应的全部值
List<String> webValueList = new ArrayList<String>();
for(int i = 0;i<webValue.length;i++){
if(webValue[i]!=null&&!"".equals(webValue[i])){
webValueList.add(webValue[i]);//获取不为空的值
}
}
if (webParam.startsWith(_param)&&!webValueList.isEmpty())/*推断參数是否以方法參数名为开头*/ {
paramsMap.put(webParam, webValueList.toArray(new String[webValueList.size()]));
}
}
BeanWrapper obj = new BeanWrapperImpl(object);//此类能够实现设置和获得属性的功能。
obj.registerCustomEditor(Date.class, null, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
//System.out.println(obj.findCustomEditor(Date.class, null).getAsText());
//下面为给对象属性赋值
for (String propName : paramsMap.keySet()) {
Object propVals = paramsMap.get(propName);
String[] props = propName.split("\\.");
if (props.length == 2) {
obj.setPropertyValue(props[1], propVals);
} else if (props.length == 3) {
Object tmpObj = obj.getPropertyValue(props[1]);
if (tmpObj == null)
obj.setPropertyValue(props[1], obj.getPropertyType(props[1]).newInstance());
obj.setPropertyValue(props[1] + "." + props[2], propVals);
}
}
return object;
}
}catch(Exception e){
e.printStackTrace();
}
return WebArgumentResolver.UNRESOLVED;
}
}
两个类写好后对mvc配置文件进行配置
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="xx.xx.xx.xx.BeanArgumentResolver" />
</mvc:argument-resolvers>
<mvc:message-converters register-defaults="true">
<!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
<!-- 将Jackson2HttpMessageConverter的默认格式化输出设为true -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="prettyPrint" value="true"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
接下来就是使用了mvc的controller方法例如以下
@RequestMapping(value="/saveEvent")
@ResponseBody
public AjaxResult saveEvent(@RequestBean Event event){
event =eventService.saveTemporaryEvent(event);
return AjaxResult.objectResult(event);
}
页面form表单代码
<td align="right">客户代码:</td>
<td><input type="hidden" name="event.submitUser.userId" value="${event.submitUser.userId }" /></td>
<td align="right">客户电话:</td>
<td><input class="inpname_" type="text" id="submitTel" name="event.submitTel" value="${event.submitTel }"/></td>
spring mvc 接受多对象的处置的更多相关文章
- Spring MVC 接受的请求参数
目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...
- Spring mvc接受集合类型参数的方法
public String xxxxx(String xxxx, String xxxxx, @RequestParam("parameterList[]") List<St ...
- spring mvc 接受前台json @RequestBody json 属性 空 使用 JsonProperty spring mvc 获取json转乘bean
请给json序列序列化成的javabean 属性加上 @JsonProperty(value = "real_name") 否则 springmvc 可能接受不到数据 ja ...
- Spring MVC接受参数的注解
一.Request请求发出后,Headler Method是如何接收处理数据的? Headler Method绑定常用的参数注解,根据处理request的不同部分分为四类: A.处理 Request ...
- spring mvc 接受数组
@RequestParam(value = "customerIds[]")Integer[] customerIds 加上 requestParam value设置为 &qu ...
- spring mvc get请求也可以接受DTO对象
spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从ht ...
- Spring MVC(八)--控制器接受简单列表参数
有些场景下需要向后台传递一个数组,比如批量删除传多个ID的情况,可以使用数组传递,数组中的ID元素为简单类型,即基本类型. 现在我的测试场景是:要从数据库中查询minId<id<maxId ...
- Spring MVC(五)--控制器通过注解@RequestParam接受参数
上一篇中提到,当前后端命名规则不一致时,需要通过注解@RequestParam接受参数,这个注解是作用在参数上.下面通过实例说明,场景如下: 在页面输入两个参数,控制器通过注解接受,并将接受到的数据渲 ...
- Spring MVC(四)--控制器接受pojo参数
以pojo的方式传递参数适用于参数较多的情况,或者是传递对象的这种情况,比如要创建一个用户,用户有十多个属性,此时就可以通过用户的pojo对象来传参数,需要注意的是前端各字段的名称和pojo对应的属性 ...
随机推荐
- 设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)
设计模式 ( 二十 ) 访问者模式Visitor(对象行为型) 1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象, ...
- 流行的Python项目汇总
年有哪些流行的Python项目呢?下面,我们一起来看下. 一.测试和调试 python_koans :Python Koans 算 “Ruby Koans” 的一部分,作为交互式教程,可以学习 TDD ...
- java实现从实体到SQL语句的转换(二)
前面写过一篇生成insert语句的博客,今天把CRUD的都完善了一下,需要的上次写的获取实体信息的类,这里就不贴出来了[点击打开查看] 下面是完整的代码: package tan.code.utils ...
- c++构造析构顺序
class A { public: A(){ cout << "constrcut A" << endl; }; ~A(){ cout << & ...
- arm:启动代码判断是从nand启动还是从norflash启动,拷贝程序到内存的过程
一.nand启动和nor启动:[1] CPU从0x00000000位置开始运行程序. 1.nand启动: 如果将S3C2440配置成从NANDFLASH启动(将开发板的启动开关拔到nand端,此时OM ...
- 04-OC属性的使用、自动释放池、封装和继承
目录: 一.IOS6声明式属性的使用 二.autoreleasepool自动释放池 三.封装.继承 回到顶部 一.IOS6声明式属性的使用 注:声明式属性默认情况下,并没有解决内存问题, 当使用@pr ...
- WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[扩展篇]
原文:WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[扩展篇] 通过<实现篇>对WSDL元素和终结点三要素的之间的匹配关系的介绍,我们知道了WSDL的Binding ...
- 基于visual Studio2013解决算法导论之005原地随机排列数组
题目 原地随机排列数组 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...
- 基于visual Studio2013解决C语言竞赛题之0702函数设计
题目
- android开发之蓝牙配对连接的方法
最近在做蓝牙开锁的小项目,手机去连接单片机总是出现问题,和手机的连接也不稳定,看了不少蓝牙方面的文档,做了个关于蓝牙连接的小结. 在做android蓝牙串口连接的时候一般会使用 ? 1 2 3 4 5 ...