Spring MVC – Phần 14: Trả về dữ liệu định dạng JSON trong Spring MVC
Ở bài này chúng ta sẽ thực hiện một ví dụ trả về dữ liệu định dạng JSON thay vì trả về view ở controller
Ví dụ:
Việc trả về dữ liệu JSON trong controller như này thường được áp dụng để cung cấp các API (RestFul – Webservice: mình sẽ giới thiệu trong bài sau chi tiết hơn)
Spring MVC Generate JSON
Thư viện sử dụng:
<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>stackjava.com</groupId> <artifactId>SpringMVC-JSON</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.3</version> </dependency> </dependencies> </project>
sau khi khai báo các thư viện Jackson Core, Jackson Databind, Jackson Annotations, những controller được đánh dấu @ResponseBody sẽ tự động định dạng đối tượng và trả về dữ liệu dạng JSON
File Spring Config:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <context:component-scan base-package="stackjava.com.springmvc" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans>
Các class Model:
package stackjava.com.springmvc.model; public class User { private int id; private String name; private String email; // getter - setter }
Class Controller:
package stackjava.com.springmvc.controller; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import stackjava.com.springmvc.model.User; @Controller public class HelloController { @RequestMapping("/") public String index() { return "index"; } @RequestMapping("/json") @ResponseBody public User testJSON() { User user = new User(1, "kai", "abc@gmail.com"); return user; } @RequestMapping("/list-json") @ResponseBody public List<User> testListJSON() { List<User> listUser = new ArrayList<User>(); listUser.add(new User(1, "kai", "abc@gmail.com")); listUser.add(new User(2, "stack", "def@yahoo.com")); return listUser; } }
File view:
<html> <head> <title>index</title> </head> <body> <h1>Spring MVC Generate JSON!</h1> <a href="json">/json</a> <br/> <a href="list-json">/list-json</a> <br/> </body> </html>
Demo:
Okay, Done!
Download code ví dụ trên tại đây