文章目录
- 一、Spring MVC 接收请求参数
- 二、Spring MVC 数据回显
- 三、SpringMVC 返回中文乱码问题
一、Spring MVC 接收请求参数
客户端或者前端通过 URL 请求传递过来的参数,在控制器中如何接收?
-
1、当参数和 Controller 中的方法参数一致时,无需做处理,可以正常接收
-
代码示例以及对应 URL
-
http://localhost:8080/user?name=sys
@RequestMapping("/user") public String getUser(Model model, String name) { model.addAttribute("msg", "name为" + name); return "test"; }
-
-
测试结果
-
-
2、当参数和 Controller 中的方法参数不一致时,需要通过 @RequestParam 控制
-
代码示例以及对应 URL
-
http://localhost:8080/user2?username=sys
@RequestMapping("/user2") public String getUser2(Model model, @RequestParam("username") String name) { model.addAttribute("msg", "name为" + name); return "test"; }
-
-
测试结果
-
-
3、当提交的参数与实体类中的属性一致,可以直接使用实体类接收即可
-
代码示例以及对应 URL
-
http://localhost:8080/user?name=sys&age=99
-
实体类
@Data public class User { private String id; private String name; private int age; }
-
controller
@RequestMapping("/user3") public String getUser3(Model model, User user) { model.addAttribute("msg", "id为" + user.getId()+"\n\t"+"name为" + user.getName()+"\n\t"+"age为" + user.getAge()); return "test"; }
-
-
测试结果
-
注:如果客户端传递的参数和实体类属性不一致,则默认给个 null
-
二、Spring MVC 数据回显
数据显示到前端有三种方式:ModelAndView、ModelMap、Model
-
通过 ModelAndView 将数据返回给前端,需要搭配 Servlet API 使用。ModelAndView指模型和视图的集合,既包含模型 又包含视图;ModelAndView其实就是两个作用,一个是指定返回页面,另一个是在返回页面的同时添加属性(也就是返回的数据);
public class ModelAndViewController implements Controller { public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse ref) throws Exception { //返回一个模型视图对象 ModelAndView mv = new ModelAndView(); // 获取要返回给客户端的数据,这里默认给个 ModelAndViewController mv.addObject("msg","ModelAndViewController "); // 获取视图名称 mv.setViewName("test"); // 返回模型和视图 return mv; } }
-
通过 ModelMap 将数据返回给前端。ModelMap继承LinkedHashMap,spring框架自动创建实例并作为controller的入参,用户无需自己创建
@RequestMapping("/hello") public String hello(@RequestParam("username") String name, ModelMap model){ //封装要显示到视图中的数据 //相当于req.setAttribute("name",name); model.addAttribute("name",name); // 返回视图名称 return "test"; }
-
通过 Model 将数据返回给前端。Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类
@RequestMapping("/hello") public String hello(@RequestParam("username") String name, Model model){ //封装要显示到视图中的数据 //相当于req.setAttribute("name",name); model.addAttribute("msg",name); // 返回视图名称 return "test"; }
三、SpringMVC 返回中文乱码问题
-
方法一:在 web.xml 文件中对乱码问题进行了配置,配置代码如下:
<!-- 配置过滤器 --> <filter> <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> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
方法二:在 @RequestMapping 中添加 produces 参数,但是有着较大的局限性
-
局限性一:需要在每一个接口中都加上 "produces=“text/json;charset=utf-8” 这段代码,太过麻烦且代码质量不高
-
局限性二:不知有着 text/json,还有着其他不同种类的数据,而配置只能选一种
-
-
方法三: 在Spring-mvc.xml配置文件统一处理
-
在< mvc:annotation-driven/ >中添加如下内容:
<mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> <value>text/plain;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> <value>text/json;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters>
-