首页 > 编程笔记 > Java笔记 阅读:19

Sprint Boot中@ResponseBody注解的用法

在Sprint Boot中,@ResponseBody 注解主要用于定义数据的返回格式,作用在方法上,默认使用 Jackson 序列化成 JSON 字符串后返回给客户端,如果是字符串,则直接返回。

在 Controller 中有时需要返回 JSON 格式的数据,如果想直接返回数据体而不是视图名,则需要在方法上使用 @ResponseBody。

@ResponseBody 注解使用方式如下:
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/getUser")
    @ResponseBody
    public User getUser(){
        User u = new User();
        u.setName("weiz222");
        u.setAge(20);
        u.setPassword("weiz222");
        return u;
    }
}
在上面的示例中,请求 /user/getUser 时,返回 JSON 格式的 User 数据。这与 @RestController 的作用类似。

需要注意的是,使用 @ResponseBody 注解时需要注意请求的类型和地址,如果期望返回 JSON,但是请求 URL 以 html 结尾的页面,就会导致 Spring Boot 认为请求的是 HTML 类型的资源,而返回 JSON 类型的资源,与期望类型不一致,因此报出如下错误:

There was an unexpected error (type=Not Acceptable, status=406). Could not find acceptable representation

根据 RESTful 规范的建议,在 Spring Boot 应用中,如果期望返回 JSON 类型的资源,URL 请求资源后缀就使用 json;如果期望返回视图,URL 请求资源后缀就使用 html。

相关文章