Spring REST Hello World JSON Example
2015-08-31 09:28
681 查看
1) Using @ResponseBody
Annotation
This technique is simple and easy. You have to include only jackson dependencies into classpath of your application and spring will register Jackson2JsonMessageConverterclass automatically into context. Whenever you ask for a resource from REST API and provide http header “
accept: application/json“, you will get back the json representation of resource.
Runtime JSON dependency
<!-- Jackson JSON Processor --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.1</version> </dependency>
@ResponseBody Support
Here @RestController = @Controller + @ResponseBody
@RestController public class EmployeeRESTController { @RequestMapping(value = "/employees") public EmployeeListVO getAllEmployees() { EmployeeListVO employees = new EmployeeListVO(); EmployeeVO empOne = new EmployeeVO(1,"Lokesh","Gupta","howtodoinjava@gmail.com"); EmployeeVO empTwo = new EmployeeVO(2,"Amit","Singhal","asinghal@yahoo.com"); EmployeeVO empThree = new EmployeeVO(3,"Kirti","Mishra","kmishra@gmail.com"); employees.getEmployees().add(empOne); employees.getEmployees().add(empTwo); employees.getEmployees().add(empThree); return employees; } @RequestMapping(value = "/employees/{id}") public ResponseEntity<EmployeeVO> getEmployeeById (@PathVariable("id") int id) { if (id <= 3) { EmployeeVO employee = new EmployeeVO(1,"Lokesh","Gupta","howtodoinjava@gmail.com"); return new ResponseEntity<EmployeeVO>(employee, HttpStatus.OK); } return new ResponseEntity(HttpStatus.NOT_FOUND); } }
2) Using MappingJackson2JsonView
Support
The MappingJackson2JsonViewclass also depends on the presence of the Jackson JSON processor library in classpath, so you don’t need to add anything extra. Complete
pom.xmllooks like this:
pom.xml
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.howtodoinjava.demo</groupId>
<artifactId>springrestexample</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>springrestexample Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- Spring MVC support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!-- Jackson JSON Processor --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.1</version> </dependency>
</dependencies>
<build>
<finalName>springrestexample</finalName>
</build>
</project>
2) Adding MappingJackson2JsonView
view
When you are using MappingJackson2JsonViewclass, you will need to return a view name of type
MappingJackson2JsonView. So you will need to change two places.
a) Controller change
You will need to returnviewNamefrom controller method. In our case, view name is “
jsonTemplate“.
“`
package com.howtodoinjava.demo.controller;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.howtodoinjava.demo.model.EmployeeListVO;
import com.howtodoinjava.demo.model.EmployeeVO;
@Controller
public class EmployeeRESTController
{
private EmployeeListVO getEmployeesCollection() { EmployeeListVO employees = new EmployeeListVO(); EmployeeVO empOne = new EmployeeVO(1,"Lokesh","Gupta","howtodoinjava@gmail.com"); EmployeeVO empTwo = new EmployeeVO(2,"Amit","Singhal","asinghal@yahoo.com"); EmployeeVO empThree = new EmployeeVO(3,"Kirti","Mishra","kmishra@gmail.com"); employees.getEmployees().add(empOne); employees.getEmployees().add(empTwo); employees.getEmployees().add(empThree); return employees; } @RequestMapping(value = "/employees") public String getAllEmployeesJSON(Model model) { model.addAttribute("employees", getEmployeesCollection()); return "jsonTemplate"; }
}
““
b) Configuration Change
You will need to configure viewName “jsonTemplate” as bean of type
MappingJackson2JsonView. And you will need to configure view resolver of type
BeanNameViewResolver. This way viewName “
jsonTemplate” will be matched with
MappingJackson2JsonViewand parsed JSON response will be returned to client.
RESTConfiguration.java
@Configuration public class RESTConfiguration { @Bean public View jsonTemplate() { MappingJackson2JsonView view = new MappingJackson2JsonView(); view.setPrettyPrint(true); return view; } @Bean public ViewResolver viewResolver() { return new BeanNameViewResolver(); } }
Equivalent XML configuration to above java configuration is as below.
spring-servlet.xml
<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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.howtodoinjava.demo" /> <mvc:annotation-driven /> <!-- JSON Support --> <bean name="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"/> <bean name="jsonTemplate" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/> </beans>
3) Test Changes
Now when you hit the URL : http://localhost:8080/springrestexample/employees , you will get this result.Project Structure
相关文章推荐
- eclipse java字体Courier New
- java应用压缩、解压zip文件
- java中四种引用类型
- 英语不好,弄个eclipse汉化玩玩
- Java基础知识强化11:多态的两道基础题
- Java就业指导
- 浅谈下java泛型
- java 访问的权限
- java 工具类(时间格式字符串截取年月)
- JDBC主要API介绍
- 如何做实时监控?—— 参考 Spring Boot 实现
- 如何做实时监控?—— 参考 Spring Boot 实现
- 如何做实时监控?—— 参考 Spring Boot 实现
- 如何做实时监控?—— 参考 Spring Boot 实现
- 用struts2开发,<result type="json"></result>是什么意思?
- Java——用户激活邮件工具类
- eclipse版本
- eclipse 添加 hibernate 插件
- eclipse版本
- 再多一点理解java中的equals()