文章目錄
設置靜態資源過濾
使用SpringMVC框架,DispatcherServlet(核心控制器)會攔截到所有的資源,導致靜態資源(img、css、js)也會被攔截,從而不能被使用。
解決方法:在springmvc.xml
配置文件配置靜態資源不進行攔截。
<!--
設置靜態資源不進行攔截
mapping:用戶請求的路徑
location="":帶有上面請求路徑的請求,直接到指定目錄下找對應的文件
-->
<mvc:resources mapping="/js/**" location="/js/" />
<!--<!–如訪問http://localhost:8080/images/0.jpg 不進行如下配置,則報404–>-->
<mvc:resources mapping="/images/**" location="/images/"/>
<!--擴展:對進入DispatcherServlet的URL進行篩查
如果發現是靜態資源的請求,就將該請求轉由Web應用服務器默認的Servlet處理,
如果不是靜態資源的請求,才由DispatcherServlet(SpringMVC的核心控制器)繼續處理。-->
<!--<mvc:default-servlet-handler />-->
JSON數據處理
使用@RequestBody註解把json的字符串轉換成JavaBean對象,需要引入jackson(或fastjson)相關依賴包,如沒有引入,類型轉換異常報415。
<!--用於JSON數據轉換-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
使用@RequestBody註解,前臺傳的json的字符串在後臺轉換成JavaBean的對象
回顧:RequestBody註解:獲取請求體的內容,參數拼接成一個字符串
前端(POST方式)傳入一個JSON數據,後臺會將JSON數據轉成JavaBean
@Controller
@RequestMapping(value = "/json")
public class JsonHandlerController {
/*使用@RequestBody註解把 前臺傳的json的字符串 在後臺轉換成JavaBean的對象
@RequestBody:如果使用@RequestBody接收數據轉成 JavaBean,客戶端提交數據必須爲 JSON格式 注意:提交方式要是POST
@RequestBody接收整個提交內容體,並轉換成JavaBean對象
*/
@RequestMapping(value = "/add")
public void add(@RequestBody User user){
System.out.println(user);
}
}
使用@ResponseBody註解,在後臺把JavaBean對象轉換成json字符串,直接響應
方法上加上@ResponseBody註解,響應數據爲JSON格式數據
/*
@ResponseBody:方法上加上@ResponseBody註解,響應數據爲JSON數據或String。
*/
@ResponseBody
@RequestMapping(value = "/outjsonresponse")
public User outJsonResponseBody(){
User user = new User();
user.setName("周哈哈");
user.setLevel(66);
return user;
}
@RequestBody註解與@ResponseBody註解結合使用
/*
@RequestBody:如果使用@RequestBody接收數據轉成 JavaBean,客戶端提交數據必須爲 JSON格式 注意:提交方式要是POST
@ResponseBody:方法上加上@ResponseBody註解,響應數據JSON數據。
*/
@ResponseBody
@RequestMapping(value = "/bean")
public User addBean(@RequestBody User user){
System.out.println(user);
return user;
}
前端
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="/js/jquery-2.2.3.min.js"></script>
</head>
<body>
<button type="button" id="btn">提交JSON數據</button>
<script>
$('#btn').click(function () {
//AJAX請求方式,向後臺發送JSON格式數據
$.ajax({
url:'/json/bean',
type:'POST',
data:'{"name":"admin","level":123}',
dataType: "json",
contentType:'application/json;charset=utf-8',
success:function (data) {
console.log(data);
}
});
});
</script>
</body>
</html>
客戶端提交數據
後臺響應數據
擴展:ResponseEntity把JavaBean對象轉換成json字符串,直接響應
//擴展:後臺把JavaBean對象轉換成json字符串,直接響應
@RequestMapping(value = "/demo")
public ResponseEntity<User> outJson(){
User user = new User();
user.setName("周哈哈");
user.setLevel(66);
//第1個參數:需要響應的數據
//第2個參數:響應的狀態
return new ResponseEntity<User>(user, HttpStatus.OK);
}
擴展: @RestController把JavaBean對象轉換成json字符串,直接響應
/*
擴展:@RestController註解相當於@Controller @ResponseBody,
可以後臺把JavaBean對象轉換成json字符串,直接響應
*/
@RestController //相當於寫了 @Controller @ResponseBody
@RequestMapping(value = "/restController/json")
public class JsonHandlerRestController {
//後臺把JavaBean對象轉換成json字符串,直接響應
@RequestMapping(value = "/demo")
public User outJson(){
User address = new User();
address.setName("張三三");
address.setLevel(20);
return address;
}
}