SpringMVC02_數據綁定

SpringMVC02_數據綁定


  • 示例1:
    通過 @RequestParam 註解將請求參數中的屬性綁定至方法的形參(由HandlerAdapter來完成)
@RequestMapping(value = "/index",method = RequestMethod.GET,params = {"name","id=10"})
public String index(@RequestParam("name") String str,@RequestParam("id") int age){
	System.out.println(str);
	System.out.println(age);
	System.out.println("執行了index...");
	return "index";
}
  • 示例2:

傳統請求url:http://localhost:8080/hello/index?name=zhangsan&id=10
REST風格的請求url:http://localhost:8080/hello/index/zhangsan/10
通過 @PathVariable 註解完成REST風格的請求參數與形參的映射

@RequestMapping("/rest/{name}/{id}")
public String rest(@PathVariable("name") String name,@PathVariable("id") int id){
	System.out.println(name);
	System.out.println(id);
	return "index";
}
  • 示例3:
    通過 @CookieValue 註解獲取Cookie值
@RequestMapping("/cookie")
public String cookie(@CookieValue(value = "JSESSIONID") String sessionId){
	System.out.println(sessionId);
	return "index";
}
  • 示例4:
    SpringMVC會根據請求參數名和JavaBean屬性名進行自動匹配,自動爲對象填充屬性值。

Address實體類:

package com.blu.entity;
import lombok.Data;

@Data
public class Address {
    private String value;
}

User實體類:

package com.blu.entity;
import lombok.Data;

@Data
public class User {
    private long id;
    private String name;
    private Address address;
}

register.jsp頁面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <form action="/save" method="post">
            用戶id:<input type="text" name="id"/><br/>
            用戶名:<input type="text" name="name"/><br/>
            <input type="text" name="address.value"/><br/>
            <input type="submit" value="註冊"/>
        </form>
    </body>
</html>

Handler方法:

@RequestMapping("/register")
public String Login() {
	return "login";
}

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(User user) {
	System.out.println(user);
	return "register";
}

輸入url進入register頁面
在這裏插入圖片描述
輸入值提交:
在這裏插入圖片描述
控制檯打印結果出現中文亂碼:

User(id=1, name=BLU, address=Address(value=?±?è????????))

解決方法:
修改web.xml,添加處理中文亂碼的過濾器:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  <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>
  
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

重啓運行,輸入中文值提交,控制檯收到了正確的中文值:

User(id=1, name=BLU, address=Address(value=江蘇南京))

注:該過濾器解決了前端發送給後端的中文亂碼問題
而SpringMVC的@ResponseBody註解可以將請求方法返回的對象直接轉換成JSON對象,但是當返回值是String的時候,也會出現中文亂碼

示例:

@ResponseBody
@RequestMapping("/hello")
public String hello() {
	return "你好!BLU";
}

在這裏插入圖片描述
解決辦法1:
只要在springmvc.xml配置文件中添加如下配置即可:

<mvc:annotation-driven>
	<!-- 消息轉換器(所謂的消息就是指後臺返回給前端的數據) -->
	<mvc:message-converters register-defaults="true">
		<bean class="org.springframework.http.converter.StringHttpMessageConverter">
			<constructor-arg value="UTF-8" />
		</bean>
	</mvc:message-converters>
</mvc:annotation-driven>

重試結果:
在這裏插入圖片描述
解決辦法2:
@RequestMapping 註解中添加屬性:produces = "text/html;charset=UTF-8"

@ResponseBody
@RequestMapping(value= "/hello2", produces = "text/html;charset=UTF-8")
public String hello() {
	return "你好!BLU";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章