程序员社区

【SpringMvc学习及总结09】请求参数为pojo时,SpringMvc会自动封装

在这里插入图片描述

文章目录

        • 1.请求参数是个pojo,且属性都是基本类型/String类型
        • 2.请求参数是pojo,且属性为引用类型
        • 3.中文乱码问题

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时,配置完前端控制器以后,直接配置字符编码过滤器。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【SpringMvc学习及总结09】请求参数为pojo时,SpringMvc会自动封装

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区