您的位置:首页 > 编程语言 > Java开发

spring mvc数据绑定

2016-06-17 12:12 288 查看
DataBinderController.java

package com.wyc.controller;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.xml.ws.BindingType;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.wyc.model.Admin;
import com.wyc.model.User;
import com.wyc.model.UserListForm;
import com.wyc.model.UserMapForm;
import com.wyc.model.UserSetForm;

@Controller
@RequestMapping(value="/data")
public class DataBinderController {

//-----------基本类型-----------------
//http://localhost:8080/SpringMVC/data/baseType1?age=1
//不指定age的情况下会出现500错误:
//org.springframework.web.util.NestedServletException:
//Request processing failed;
//nested exception is java.lang.IllegalStateException:
//Optional int parameter 'age' is present but cannot be translated into a null
//@requestParam是传递时的参数名称,使用之后上述地址必须改为:
//http://localhost:8080/SpringMVC/data/baseType1?xage=1
@RequestMapping("/baseType1")
@ResponseBody
public String baseType1(@RequestParam(name="xage")int age){
return "age:" + age;
}

//-------------基本类型的包装类型----------------
//http://localhost:8080/SpringMVC/data/baseType2
//此处使用包装类型,因此允许参数为空,结果输出为age:null
@RequestMapping("/baseType2")
@ResponseBody
public String baseType2(Integer age){
return "age:" + age;
}

//----------单个object对象--------------
//user还有另外一个对象
//1、不输入任何参数:http://localhost:8080/SpringMVC/data/object
//结果:User [name=null, age=0, contactInfo=null]
//2、http://localhost:8080/SpringMVC/data/object?age=1&name=fdsk&contactInfo.tel=1389234&contactInfo.address=fds
//结果:User [name=fdsk, age=1, contactInfo=ContactInfo [tel=1389234, address=fds]]
//3、http://localhost:8080/SpringMVC/data/object?user.age=10&user.name=fjdsklk(可见该种方式并不支持)
//User [name=null, age=0, contactInfo=null]
@RequestMapping("/object")
@ResponseBody
public String object(User user){
return user.toString();
}

//--------多个object对象(存在相同属性名称)-----------
//1、http://localhost:8080/SpringMVC/data/objects?name=fsdl只传属性名称
//结果:User [name=fsdl, age=0, contactInfo=null] Admin [name=fsdl, age=0](都被赋值)
//2、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl
//结果:User [name=null, age=0, contactInfo=null] Admin [name=null, age=0](没有成功赋值)
//3、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl(此处需加上下面的俩个方法)
//结果:User [name=fdjlsj, age=0, contactInfo=null] Admin [name=fsdjkl, age=0]
//4、http://localhost:8080/SpringMVC/data/objects?user.name=fdjlsj&admin.name=fsdjkl&user.contactInfo.address=324(同样需要加上下面的俩个方法,并且此处还使用了user对象的contactInfo属性)
//结果:User [name=fdjlsj, age=0, contactInfo=ContactInfo [tel=null, address=324]] Admin [name=fsdjkl, age=0]
@RequestMapping("/objects")
@ResponseBody
public String objects(User user,Admin admin){
return user.toString() + " " + admin.toString();
}

@InitBinder("user")
public void initUser(WebDataBinder binder){
binder.setFieldDefaultPrefix("user.");
}

@InitBinder("admin")
public void initAdmin(WebDataBinder binder){
binder.setFieldDefaultPrefix("admin.");
}

//--------list------------
//以下写法无效
/*
@RequestMapping("/list")
@ResponseBody
public String list(List users){
StringBuilder stringBuilder = new StringBuilder();
for(User user : users){
stringBuilder.append(user.toString()).append(" ");
}
return stringBuilder.toString();
}
*/

//以下才是正确的写法(list不需要初始化,可以看到UserListForm类中并没有初始化。这点和set不同)
//1、http://localhost:8080/SpringMVC/data/list?users[0].name=fhdsk&users[1].name=fdsjl
//结果:UserListForm [users=[User [name=fhdsk, age=0, contactInfo=null], User [name=fdsjl, age=0, contactInfo=null]]]
//2、http://localhost:8080/SpringMVC/data/list?users[0].name=fhdsk&users[5].name=fdsjl
//结果:UserListForm [users=[
//User [name=fhdsk, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=null, age=0, contactInfo=null],
//User [name=fdsjl, age=0, contactInfo=null]]](此时users的size变为6)
@RequestMapping("/list")
@ResponseBody
public String list(UserListForm users){
return users.toString();
}

//------------set-------------------
//http://localhost:8080/SpringMVC/data/set?users[0].name=fhdsk&users[1].name=fdsjl
//结果:500异常,因为UserSetForm里面并没有初始化,初始化后的结果如下:
//UserSetForm [users=[User [name=fhdsk, age=0, contactInfo=null], User [name=fdsjl, age=0, contactInfo=null]]]
//但此时users限制了只有俩个的大小(在UserSetForm里面指定的),加上第三个依旧会报错
@RequestMapping("/set")
@ResponseBody
public String set(UserSetForm users){
return users.toString();
}

//-----------map-----------
//http://localhost:8080/SpringMVC/data/map?userMap[%27x%27].name=fhdsk&userMap[%27y%27].name=fdsjl
//注意是userMap而不是users,此处的userMap对应于UserMapForm的属性名称
//结果:UserMapForm [userMap={x=User [name=fhdsk, age=0, contactInfo=null], y=User [name=fdsjl, age=0, contactInfo=null]}]
@RequestMapping("/map")
@ResponseBody
public String map(UserMapForm users){
return users.toString();
}

//-------------json---------
//注意需要配置spring配置文件,并引入依赖
@RequestMapping("/json")
@ResponseBody
public String json(@RequestBody User user){
return user.toString();
}

//-------------xml---------
//注意需要配置spring配置文件,并引入依赖
@RequestMapping("/xml")
@ResponseBody
public String xml(@RequestBody Admin admin){
return admin.toString();
}

//-----------PropertyEditor---------
//http://localhost:8080/SpringMVC/data/pe?date1=2018-01-01
//结果:Mon Jan 01 00:00:00 CST 2018
//若没有initDate1方法会报400错误
@RequestMapping("/pe")
@ResponseBody
public String pe(Date date1){
return date1.toString();
}

@InitBinder("date1")
public void initDate1(WebDataBinder binder){
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}

//------------formatter&converter------------
//需要在spring配置文件中配置相关信息
//http://localhost:8080/SpringMVC/data/date?date=2018-02-02
//结果:Fri Feb 02 00:00:00 CST 2018
@RequestMapping("/date")
@ResponseBody
public String date(Date date){
return date.toString();
}
}


实体类

Admin.java

package com.wyc.model;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="admin")
public class Admin {

private String name;
private int age;
@XmlElement(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name="age")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Admin [name=" + name + ", age=" + age + "]";
}

}


User.java

package com.wyc.model;

public class User {

private String name;
private int age;
private ContactInfo contactInfo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public ContactInfo getContactInfo() {
return contactInfo;
}
public void setContactInfo(ContactInfo contactInfo) {
this.contactInfo = contactInfo;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", contactInfo="
+ contactInfo + "]";
}

}


ContaceInfo.java

package com.wyc.model;

public class ContactInfo {

private String tel;
private String address;
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "ContactInfo [tel=" + tel + ", address=" + address + "]";
}

}


中介类(沃兹季硕德,具体称呼不详)

UserListForm.java

package com.wyc.model;

import java.util.List;

public class UserListForm {

private List users;

public List getUsers() {
return users;
}

public void setUsers(List users) {
this.users = users;
}

@Override
public String toString() {
return "UserListForm [users=" + users + "]";
}

}


UserSetForm.java

package com.wyc.model;

import java.util.LinkedHashSet;
import java.util.Set;

public class UserSetForm {

private Set users;

public UserSetForm() {
users = new LinkedHashSet();
users.add(new User());
users.add(new User());
}

public Set getUsers() {
return users;
}

public void setUsers(Set users) {
this.users = users;
}

@Override
public String toString() {
return "UserSetForm [users=" + users + "]";
}

}


UserMapForm.java

package com.wyc.model;

import java.util.Map;

public class UserMapForm {

private Map userMap;

public Map getUserMap() {
return userMap;
}

public void setUserMap(Map userMap) {
this.userMap = userMap;
}

@Override
public String toString() {
return "UserMapForm [userMap=" + userMap + "]";
}

}


转换器

MyDateConverter .java

package com.wyc.convertor;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class MyDateConverter implements Converter{

@Override
public Date convert(String arg0) {
try{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.parse(arg0);
}catch(Exception e){
e.printStackTrace();
}
return null;
}

}


格式器

MyDateFormatter.java

package com.wyc.convertor;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.springframework.format.Formatter;

public class MyDateFormatter implements Formatter{

@Override
public String print(Date arg0, Locale arg1) {
// TODO Auto-generated method stub
return null;
}

@Override
public Date parse(String text, Locale arg1) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.parse(text);
}

}


web.xml

Archetype Created Web Applicationmvc-dispatcherorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/configs/spring/applicationContext.xml1mvc-dispatcher/


spring配置文件

<?xml version="1.0" encoding="UTF-8"?>


json绑定结果:



xml绑定结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: