SpringMVC實現JSON數據處理,設置靜態資源過濾

設置靜態資源過濾

使用SpringMVC框架,DispatcherServlet(核心控制器)會攔截到所有的資源,導致靜態資源(img、css、js)也會被攔截,從而不能被使用。
在這裏插入圖片描述
解決方法:在springmvc.xml配置文件配置靜態資源不進行攔截。

    <!--
      設置靜態資源不進行攔截
      mapping:用戶請求的路徑
      location="":帶有上面請求路徑的請求,直接到指定目錄下找對應的文件
  -->
    <mvc:resources mapping="/js/**" location="/js/" />
    <!--&lt;!&ndash;如訪問http://localhost:8080/images/0.jpg  不進行如下配置,則報404&ndash;&gt;-->
    <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註解:獲取請求體的內容,參數拼接成一個字符串

回顧:jQuery框架ajax使用

前端(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;
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章