Bộ sưu tập

Trả về dữ liệu kiểu JSON trong Spring MVC


https://codersontrang.com/2013/04/22/tra%cc%89-ve-kie%cc%89u-du%cc%83-lie%cc%a3u-json-trong-spring-mvc/

JSON (JavaScript Object Notation) là một cấu trúc dữ liệu được dùng rất nhiều trong việc trao đổi dữ liệu giữa web server và browser. Ta hay thấy sự xuất hiện của những dữ liệu kiểu JSON như là kết quả trả về từ web server trong các trường hợp ở phía browser dùng AJAX để gửi yêu cầu lên server. Bài viết này sẽ hướng dẫn cách để trả về dữ liệu kiểu JSON từ ứng dụng web sử dụng Spring MVC.

Đầu tiên dùng Elipse IDE để tạo một project có cấu trúc giống như hình dưới đây.

codersontrang_springmvcjsondemo_2

Để hiểu rõ hơn về vai trò của các thành phần trong project, chúng ta có thể quay trở lại đọc bài “Giới thiệu về Spring MVC“. Bài viết này chỉ chú ý một điều là trong project ta sẽ sử dụng các bộ thư viện jackson để hỗ trợ cho việc sinh ra kiểu dữ liệu JSON tương ứng với đầu vào là một đối tượng bất kì.

Nội dung của hai file cấu hình web.xml và springmvcjsondemo-servlet.xml và các file Student.java, DemoController.java sẽ như dưới đây

web.xml

 <?xml version="1.0" encoding="UTF-8"?>  
 <web-app 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">  

       <servlet>  
        <servlet-name>springmvcjsondemo</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <load-on-startup>1</load-on-startup>  
       </servlet>  

       <servlet-mapping>  
        <servlet-name>springmvcjsondemo</servlet-name>  
        <url-pattern>/</url-pattern>  
       </servlet-mapping>  

 </web-app>  

springmvcjsondemo-servlet.xml

 <?xml version="1.0" encoding="UTF-8"?>  
 <beans xmlns="http://www.springframework.org/schema/beans"  
      xmlns:context="http://www.springframework.org/schema/context"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xmlns:mvc="http://www.springframework.org/schema/mvc"  
      xsi:schemaLocation="  
           http://www.springframework.org/schema/mvc  
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
     http://www.springframework.org/schema/beans     
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
     http://www.springframework.org/schema/context   
     http://www.springframework.org/schema/context/spring-context-3.0.xsd">  

      <context:component-scan base-package="springmvcjsondemo.controller" />  
      <mvc:annotation-driven/>  

 </beans>  

Student.java

 package springmvcjsondemo.domain;  

 public class Student {  
      private String id;  
      private String name;  
      private String address;  

      public String getId() {  
           return id;  
      }  
      public void setId(String id) {  
           this.id = id;  
      }  
      public String getName() {  
           return name;  
      }  
      public void setName(String name) {  
           this.name = name;  
      }  
      public String getAddress() {  
           return address;  
      }  
      public void setAddress(String address) {  
           this.address = address;  
      }  
 }  

DemoController.java

 package springmvcjsondemo.controller;  
 import org.springframework.stereotype.Controller;  
 import org.springframework.web.bind.annotation.RequestMapping;  
 import org.springframework.web.bind.annotation.RequestParam;  
 import org.springframework.web.bind.annotation.ResponseBody;  
 import springmvcjsondemo.domain.Student;  

 @Controller  
 public class DemoController {  
      @RequestMapping(value="/getStudentInfo", params={"studentId"})  
      public @ResponseBody Student getStudentInfo(  
                @RequestParam(value ="studentId") String studentId){  

           if(studentId!= null && studentId.equals("codertiensinh")){  
                Student s = new Student();  
                s.setId(studentId);  
                s.setName("Coder Tien Sinh");  
                s.setAddress("Coder Son Trang");  
                return s;  
           }  
           return null;  
      }  
 }  

Trong controller DemoController.java, khi web server nhận một yêu cầu từ phía browser với đường dẫn “/getStudentInfo?studentId=” thì yêu cầu đó được chuyển tiếp để được xử lý bên trong phương thức getStudentInfo(). Phương thức getStudentInfo() thay vì trả về tên của một view nào đó thì lại trả về một đối tượng mà chúng ta muốn chuyển đối tượng đó sang dạng JSON. Để Spring có thể biết được là chúng ta muốn chuyển đối tượng này về dạng dự liệu JSON khi trả về thì ta sử dụng annotation @ResponseBody đặt trước kiểu trả về của phương thức.

Bây giờ khi deploy project lên server và gõ đường dẫn “/getStudentInfo?studentId=codertiensinh” vào url của browser, ta thấy dữ liệu trả về là dữ liệu dạng JSON của đối tượng Student được hiển thị như hình dưới đây:

codersontrang_springmvcjsondemo_1

Với dữ liệu kiểu JSON được trả về từ phía server, việc tiếp theo là sử dụng dữ liệu đó như thế nào thì hoàn toàn tùy thuộc vào phía client, ta sẽ không quan tâm đến điều đó trong phạm vi bài viết này.

Good luck!

Advertisements

One comment on “Trả về dữ liệu kiểu JSON trong Spring MVC

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s