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>
时间: 2024-10-15 17:22:32

spring mvc 接受多对象的处置的相关文章

Spring MVC 接受的请求参数

[TOC] 1. 概述 Spring MVC 允许以多种方式将客户端的数据传送到控制器的处理方法中: 查询参数(Query Parameter) 表单参数(Form Parameter) 路径变量(Path Variable) 2. 详解 2.1 处理查询参数 查询参数都是String类型的,但当绑定到方法参数时会转换为相应的类型 在方法中使用 @RequestParam注解,同时可通过defaultValue属性设置当参数不存在时的默认值,如 public List<Spittle> spi

Spring MVC 接受表单 自动封装特性

Spring MVC中的Controller可以以实体类接受来自客户端的form表单,表单的字段自动构成实体类对象 客户端的表单 <form action="http://localhost:8080/test/user" method="POST"> <!-- 每个字段名对应实体类 --> <div> <input type="text" name="name"/> </

Spring mvc接受集合类型参数的方法

public String xxxxx(String xxxx, String xxxxx, @RequestParam("parameterList[]") List<String> parameterList) 方法比较简单,就是在参数名前边加上 @RequestParam("parameterList[]")注解,告诉Spring mvc这是一个集合类型的参数 原文地址:https://www.cnblogs.com/LionheartCGJ/p/

Spring MVC接受参数的注解

一.Request请求发出后,Headler Method是如何接收处理数据的? Headler Method绑定常用的参数注解,根据处理request的不同部分分为四类: A.处理 Request URI 部分:@PathVariable [指的是URI的Template中的Variable,不包含Query String部分] B.处理 Reauest Header 部分:@RequestHeader.@CookieValue C.处理 Request Body 部分:@RequestPar

spring mvc get请求也可以接受DTO对象

spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从http body里去拿数据. 默认不填注解的参数都会从url上面去拿. @ApiOperation(value = "查询卡券详情接口", consumes = "application/x-www-form-urlencoded") @RequestMapping(va

spring mvc @RequestBody接受post json对象

jq ajax通过post json对象 遇到的HTTP 415/400问题错误解决方案:http://www.linuxidc.com/Linux/2014-04/99928.htm 客户端: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</ti

Spring MVC(三)--控制器接受普通请求参数

Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数名称和pojo属性一致即可: 注解方式:当前端参数名和控制器名称不一致时可以使用注解方式,比如前端是param_id,而控制器中是paramId的情况: URL方式:当前端以restful格式传递参数时,后台使用这种方式接受: JSON方式:前后端如果用json方式交互时,可以使用这种方式,这是常用

视图框架:Spring MVC 4.0(1)

目录 一.表单标签库 1.1.简介 1.2.常用属性 1.3.form标签与input标签 1.4.checkbox标签 1.5.radiobutton标签 1.6.password标签 1.7.select标签 1.8.option标签 1.9.options标签 1.10.textarea.errors标签 1.11.hidden标签 1.12.radiobuttons 单选列表与checkboxs复选列表 二.视图解析器 2.1.ViewResolver视图解析器 2.2.链式视图解析器

[转] 使用Spring MVC构建REST风格WEB应用

原文地址:http://fancy888.iteye.com/blog/1629120 对于运行在网络上的MIS系统而言,处理数据的是整个系统的主要任务,翻开程序我们可以看到,80%以上的代码都在处理数据的CRUD操作.采用一种什么样的框架结构,能够使得处理数据的操作变得简单且易理解,这是大部分开发者尤其是架构设计者一直以来思考的一个问题. REST(Representational State Transfer)是一种编程风格,特别是针对网络应用的设计和开发,采用REST可以显著降低开发的复杂