@ResponseBody,ResponseEntity Spring将Object作为JSON返回

Moh*_*rmi 5 java spring spring-mvc spring-data

我正在使用Spring版本4(spring数据),我想将Object作为JSON返回,我想知道即使没有使用xmlRootElement注释用户类,下面的代码也能正常工作:

@RequestMapping(value = "/resources/users", method = RequestMethod.GET)
public ResponseEntity<User> getUserByLogonId(OAuth2Authentication auth) {

    String userLogonId = ((org.springframework.security.core.userdetails.User) auth.getUserAuthentication()
            .getPrincipal()).getUsername();
    UsersServices usersServices = new UsersServicesImpl(usersOperations);
    User user = usersServices.findByLogonId(userLogonId);
    HttpStatus userStatus = HttpStatus.NOT_FOUND;
    if (user != null) {
        userStatus = HttpStatus.FOUND;
    }
    return new ResponseEntity<User>(user, userStatus);
}
Run Code Online (Sandbox Code Playgroud)

任何机构都能解释一下 是ResponseBody/ResponseEntity自己做的工作?当我需要注释要作为JSON返回的对象类.

sun*_*t02 2

@RestController本身添加@ResponseBody注释。你可以在Github Issue中看到它

你也可以查看官方的spring教程。在这里您可以检查以下行和示例:

这些控制器方法返回简单的 POJO - Collection<Bookmark>、 和Bookmark等,除了这种add情况。当指定 的 HTTP 请求传入时Accept headerSpring MVC将循环遍历已配置的内容HttpMessageConverter,直到找到可以从POJO域模型类型转换为 中指定的内容类型Accept header(如果已配置)的类型。

您还可以按照官方文档中的以下行和示例进行操作

@RestController 是结合了@ResponseBody 和@Controller 的构造型注解。不仅如此,它还为您的控制器赋予了更多意义,并且还可能在框架的未来版本中携带额外的语义。

和,

与 @RequestBody 和 @ResponseBody 一样,Spring 使用 HttpMessageConverter 来转换请求和响应流。