SpringMVC:支持 Json 返回和请求

上回书说到 Spring MVC 的 hello world 工程,今天继续,支持 Json 格式的返回和请求。

引入依赖

SpringMVC 默认使用 jackson 来转化 json 到 java 对象以及 java 对象到 json,如无依赖,会报 No converter found for return value of type: class xxx

  • @ResponseBody:转化 java 对象到 json,输出
  • @RequestBody:转化 json 到 java 对象,输入

maven 依赖:

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>

使用 @ResponseBody

返回 Json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.tracenote.api.controller;

import com.google.common.collect.ImmutableMap;
import com.tracenote.bean.vo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;

@Controller
public class HelloWorld {

@ResponseBody
@RequestMapping(value = "helloJson", method = RequestMethod.GET)
public Map<String, String> helloJson() {
return ImmutableMap.of("result", "success");
}

接收 Json参数

1
2
3
4
5
@ResponseBody
@RequestMapping("helloUser")
public User helloUser(@RequestBody User user) {
return user;
}

使用 @RestController

相当于:@ResponseBody + @Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.tracenote.api.controller;

import com.tracenote.bean.vo.User;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("user")
public class HelloUser {

@RequestMapping("hello")
public User helloUser(@RequestBody User user) {
return user;
}
}

效果示例