前后端进行数据交互的时候,规定数据交互的格式,使数据交互规范而统一,是极为重要的事。一般而言,我们会采用 JSON 进行数据交互。本文暂不讨论如何 JSON 的格式规范,而是解析一下如何在 SpringMVC 中方便快捷的使用 JSON 进行数据交互。那就是使用两大注解: @ResponseBody 和 @RequestBody 。

pom.xml
我采用 Maven 来管理构建项目,要使用 @ResponseBody 和 @RequestBody ,要先在 pom.xml 里引入 jackson 依赖包。

<!--JSON交互--> 
<dependency> 
<groupId>com.fasterxml.jackson.core</groupId> 
<artifactId>jackson-core</artifactId> 
<version>2.5.2</version> 
</dependency> 
<dependency> 
<groupId>com.fasterxml.jackson.core</groupId> 
<artifactId>jackson-databind</artifactId> 
<version>2.5.2</version> 
</dependency>


额,至于 SpringMVC 具体使用哪个版本就需要你自己选择了。

开启 < mvc:annotation-driven />
为什么要开启 < mvc:annotation-driven /> ?
相当于注册了 DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 两个 bean ,配置一些 messageconverter 。即解决了 @Controller 注解的使用前提配置。而我们在使用 SpringMVC 时,一定会用到 @Controller 注解,如果没有 < mvc:annotation-driven/> ,那么所有的 Controller 可能就没有解析。

Java 代码示例
实体类:

public class User { 
private String name; 
private int id; 
public String getName() { return name;} 
public void setName(String name) { this.name = name;} 
public int getId() { return id;} 
public void setId(int id) { this.id = id;} 
}


Controller:

@Controller 
@RequestMapping("/json") 
public class Controller { 
 
//仅发送 JSON ,即仅使用 @ResponseBody 注解 
@RequestMapping("/justResponse") 
@ResponseBody 
public Map<String, Object> justResponse(Model model) throws Exception { 
Map<String, Object> map =new HashMap<String, Object>(); 
User user = new User(); 
user.setName("Test"); 
user.setId(123); 
map.put("string", "string"); 
map.put("user", user); 
return map; 
} 
 
//仅接收 JSON ,即仅使用 @RequestBody注解 
@RequestMapping("/justRequest") 
public User justRequest(@RequestBody User user) throws Exception { 
System.out.println("This is " + user.name); 
return user; 
} 
 
//收发 JSON ,即使用 @ResponseBody 和 @RequestBody 
@RequestMapping("/responseAndRequest") 
@ResponseBody 
public Map<String, Object> responseAndRequest(@RequestBody User user) throws Exception { 
System.out.println("This is " + user.name); 
Map<String, Object> map =new HashMap<String, Object>(); 
map.put("string", "string"); 
map.put("user", user); 
return map; 
} 
}

之所以会有 Map< String, Object > ,是因为数据交互时会存在多个对象,这样可能更贴合实际。以及还有一点,确保数据格式为 JSON ,不过使用 XML 也可以,以上两个注解也支持 XML 。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!