1.请求参数是个pojo,且属性都是基本类型/String类型
如果我们的请求参数是一个自定义类型pojo,SpringMvc会获取请求参数,自动为该pojo的属性赋值。
前提要求:请求参数的名称和对象的属性名称必须一致。
<form action="book" method="post">
书名: <input type="text" name="bookName"/><br>
作者: <input type="text" name="author"/><br>
库存: <input type="text" name="stock"/><br>
价格: <input type="text" name="price"/><br>
销量: <input type="text" name="sales"/><br>
<input type="submit" value="添加一本图书"/>
</form>
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
private String bookName;
private String author;
private Integer stock;
private Integer price;
private Integer sales;
}
@Controller
public class PojoController {
@RequestMapping("/book")
public String test(Book book){
System.out.println("我要保存的图书:"+book);
return "success";
}
}
SpringMvc是不是非常强大?
直接从请求参数中获取到每个请求参数的值,将其赋值给对象的属性,实现自动封装(为对象的属性赋值)。
2.请求参数是pojo,且属性为引用类型
Book类中有一个引用类型的属性Address
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
private String bookName;
private String author;
private Integer stock;
private Integer price;
private Integer sales;
private Address address;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Address {
private String province;
private String city;
private String street;
}
<form action="book" method="post">
书名: <input type="text" name="bookName"/><br>
作者: <input type="text" name="author"/><br>
库存: <input type="text" name="stock"/><br>
价格: <input type="text" name="price"/><br>
销量: <input type="text" name="sales"/><br>
<hr>
省:<input type="text" name="address.province"/>
市:<input type="text" name="address.city"/>
街道:<input type="text" name="address.street"/>
<input type="submit" value="添加一本图书"/>
</form>
@Controller
public class PojoController {
@RequestMapping("/book")
public String test(Book book){
System.out.println("我要保存的图书:"+book);
return "success";
}
}
3.中文乱码问题
提交的数据有可能乱码:
1.GET请求:
Tomcat安装后,在server.xml
中在8080端口处添加URIEncoding="UTF-8"
2.POST请求:
在第一次请求获取之前,设置request.setCharacterEncoding("UTF-8")
3.响应乱码:
response.setContentType("text/html;charset=utf-8")
如何解决上面的中文乱码问题?
在web.xml中配置一个解决字符乱码的过滤器:
<!--配置一个字符编码的Filter-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--encoding:指定解决post请求乱码-->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<!--forceEncoding:解决响应乱码-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
所以在写web.xml时,配置完前端控制器以后,直接配置字符编码过滤器。