Java開發學習(二十六)----SpringMVC返回響應結果

SpringMVC接收到請求和數據後,進行了一些處理,當然這個處理可以是轉發給Service,Service層再調用Dao層完成的,不管怎樣,處理完以後,都需要將結果告知給用戶。

比如:根據用戶ID查詢用戶信息、查詢用戶列表、新增用戶等。

對於響應,主要就包含兩部分內容:

  • 響應頁面

  • 響應數據

    • 文本數據

    • json數據

因爲異步調用是目前常用的主流方式,所以我們需要更關注的就是如何返回JSON數據。

一、環境準備

  • 創建一個Web的Maven項目

  • pom.xml添加Spring依賴

    <?xml version="1.0" encoding="UTF-8"?>
    ​
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    ​
      <groupId>com.itheima</groupId>
      <artifactId>springmvc_05_response</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    ​
      <dependencies>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.9.0</version>
        </dependency>
      </dependencies>
    ​
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <port>80</port>
              <path>/</path>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    ​
  • 創建對應的配置類

    public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
        protected Class<?>[] getRootConfigClasses() {
            return new Class[0];
        }
    ​
        protected Class<?>[] getServletConfigClasses() {
            return new Class[]{SpringMvcConfig.class};
        }
    ​
        protected String[] getServletMappings() {
            return new String[]{"/"};
        }
    ​
        //亂碼處理
        @Override
        protected Filter[] getServletFilters() {
            CharacterEncodingFilter filter = new CharacterEncodingFilter();
            filter.setEncoding("UTF-8");
            return new Filter[]{filter};
        }
    }
    ​
    @Configuration
    @ComponentScan("com.itheima.controller")
    //開啓json數據類型自動轉換
    @EnableWebMvc
    public class SpringMvcConfig {
    }
    ​
    ​
  • 編寫模型類User

    public class User {
        private String name;
        private int age;
        //getter...setter...toString省略
    }
  • webapp下創建page.jsp

    <html>
    <body>
    <h2>Hello Spring MVC!</h2>
    </body>
    </html>
  • 編寫UserController

    @Controller
    public class UserController {
    ​
        
    }

最終創建好的項目結構如下:

二、響應頁面

步驟1:設置返回頁面
@Controller
public class UserController {
    
    @RequestMapping("/toJumpPage")
    //注意
    //1.此處不能添加@ResponseBody,如果加了該注入,會直接將page.jsp當字符串返回前端
    //2.方法需要返回String
    public String toJumpPage(){
        System.out.println("跳轉頁面");
        return "page.jsp";
    }
    
}
步驟2:啓動程序測試

此處涉及到頁面跳轉,所以不適合採用PostMan進行測試,直接打開瀏覽器,輸入

http://localhost/toJumpPage

三、返回文本數據

步驟1:設置返回文本內容
@Controller
public class UserController {
    
    @RequestMapping("/toText")
    //注意此處該註解就不能省略,如果省略了,會把response text當前頁面名稱去查找,如果沒有回報404錯誤
    @ResponseBody
    public String toText(){
        System.out.println("返回純文本數據");
        return "response text";
    }
    
}
步驟2:啓動程序測試

此處不涉及到頁面跳轉,因爲我們現在發送的是GET請求,可以使用瀏覽器也可以使用PostMan進行測試,輸入地址http://localhost/toText訪問

四、響應JSON數據

響應POJO對象
@Controller
public class UserController {
    
    @RequestMapping("/toJsonPOJO")
    @ResponseBody
    public User toJsonPOJO(){
        System.out.println("返回json對象數據");
        User user = new User();
        user.setName("itcast");
        user.setAge(15);
        return user;
    }
    
}

返回值爲實體類對象,設置返回值爲實體類類型,即可實現返回對應對象的json數據,需要依賴@ResponseBody註解和@EnableWebMvc註解

重新啓動服務器,訪問http://localhost/toJsonPOJO

響應POJO集合對象
@Controller
public class UserController {
    
    @RequestMapping("/toJsonList")
    @ResponseBody
    public List<User> toJsonList(){
        System.out.println("返回json集合數據");
        User user1 = new User();
        user1.setName("傳智播客");
        user1.setAge(15);
​
        User user2 = new User();
        user2.setName("黑馬程序員");
        user2.setAge(12);
​
        List<User> userList = new ArrayList<User>();
        userList.add(user1);
        userList.add(user2);
​
        return userList;
    }
    
}
​

重新啓動服務器,訪問http://localhost/toJsonList

知識點1:@ResponseBody

名稱 @ResponseBody
類型 方法\類註解
位置 SpringMVC控制器方法定義上方和控制類上
作用 設置當前控制器返回值作爲響應體, 寫在類上,該類的所有方法都有該註解功能
相關屬性 pattern:指定日期時間格式字符串

說明:

  • 該註解可以寫在類上或者方法上

  • 寫在類上就是該類下的所有方法都有@ReponseBody功能

  • 當方法上有@ReponseBody註解後

    • 方法的返回值爲字符串,會將其作爲文本內容直接響應給前端

    • 方法的返回值爲對象,會將對象轉換成JSON響應給前端

此處又使用到了類型轉換,內部還是通過Converter接口的實現類完成的,所以Converter除了前面所說的功能外,它還可以實現:

  • 對象轉Json數據(POJO -> json)

  • 集合轉Json數據(Collection -> json)

 

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