请求参数格式:name=value&name=value…
- 基本类型
Controller业务方法的参数名称与请求参数name一致的话,参数值将会自动映射。
@RequestMapping("/quick8")
@ResponseBody
public int save8(String username){
System.out.println(username);
Users users = new Users();
users.setName(username);
return userService.addUser(users);
}
访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick8?username=陈瓜瓜
- POJO类型(普通JavaBean)
POJO参数的属性名与请求参数的name一致,将会自动映射。
@Component("users")
public class Users {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Users{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
//Controller
@RequestMapping("quick9")
@ResponseBody
public int save9(Users users){
System.out.println(users.toString());
return userService.addUser(users);
}
访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick8?name=陈瓜瓜&id=1
- 数组类型
与访问的参数名字一致,会自动映射。
@RequestMapping("quick10")
@ResponseBody
public void save10(String[] names){
System.out.println(Arrays.asList(names));
}
访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick8?names=陈瓜瓜&names=1
- 集合类型
需要将集合参数包装到一个POJO中才可以,使用表单提交,表单属性名要和封装的成员变量名完全一致,如下图。
public class VO {
private List<Users> usersList;
public List<Users> getUsersList() {
return usersList;
}
public void setUsersList(List<Users> usersList) {
this.usersList = usersList;
}
@Override
public String toString() {
return "VO{" +
"usersList=" + usersList +
'}';
}
}
@RequestMapping("quick11")
@ResponseBody
public void save11(VO vo){
System.out.println(vo);
}
也可以指定contenType为json,在方法参数位置使用@RequestBody,可以直接接收数据。
@RequestMapping("/quick12")
@ResponseBody
public void save12(@RequestBody List<Users> usersList){
System.out.println(usersList);
}
开放静态资源
都要放在< mvc:annotation-driven >下面
<!--前面是资源映射地址,后面是实际所在地址-->
<mvc:resources mapping="/js/**" location="/js/"/>
<!--或是直接交给原有容器处理,如tomcat-->
<mvc:default-servlet-handler/>
中文乱码
在web.xml里面设置过滤器
<filter>
<description>字符编码过滤器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@RequestParam
当前端和后台的方法中的参数名不一致时,需要显式绑定参数。
@RequestMapping("quick13")
@ResponseBody
public void save13(@RequestParam("username") String name){
System.out.println(name);
}
访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick13?username=张三
获得Restful风格参数
Restful风格的请求是使用“url+请求方式”,使用@PathVariable注解进行占位符匹配。
- GET:用于获取资源
- POST:用于新建资源
- PUT:用于更新资源
- DELETE:用于删除资源
访问地址:localhost:8080/spring_mvc_Web_exploded/user/quick14/张三
@RequestMapping(value = "/quick14/{name}",method = RequestMethod.GET)
@ResponseBody
public void save14(@PathVariable("name") String username){
System.out.println(username);
}
自定义类型转换器
例如:日子类型数据需要自定义类型转换器。
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String s) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = simpleDateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.littlepants.converter.DateConverter"/>
</list>
</property>
</bean>
文件上传
前端方法应为POST,数据格式为mutilpart/form-data
前端属性名应与后端形参名字一致,便于直接封装。
<!--Spring_mvc.xml-->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="500000"/>
</bean>
@RequestMapping(value = "quick16",method = RequestMethod.POST)
@ResponseBody
public void save16(String name, MultipartFile upload,HttpServletRequest request) throws IOException {
System.out.println(name);
System.out.println(upload);
String path =request.getSession().getServletContext().getRealPath("upload/");
System.out.println(path);
//获得上传文件名称
String originalFilename = upload.getOriginalFilename();
upload.transferTo(new File(path+originalFilename));
}