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

时间:2017-08-03 17:49:25

标签: 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);
}

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

3 个答案:

答案 0 :(得分:1)

@RestController本身会添加@ResponseBody注释。您可以在Github Issue

中查看

您还可以查看official spring tutorials。在这里,您可以查看以下行和示例:

  

这些控制器方法返回简单的POJO - Collection<Bookmark>,   除了Bookmark以外的所有情况,add等等。当一个HTTP请求   进来指定Accept headerSpring MVC循环通过   配置HttpMessageConverter,直到找到可以转换的   从POJO域模型类型到指定的内容类型   Accept header,如果这样配置的话。

您还可以按照Official doc

中的以下行和示例进行操作
  

@RestController是一个结合@ResponseBody的构造型注释   和@Controller。更重要的是,它为您提供了更多的意义   控制器,也可能在将来的版本中携带额外的语义   框架。

而且,

  

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

答案 1 :(得分:1)

xmlRootElement用于将对象表示为XML文档中的XML元素。 XML与JSON无关 当您按@RestController为您的班级添加注释时,它会为每个方法合并@Controller课程和@ResponseBody。然后HttpMessageConverter转换为请求和响应流 @ResponseEntity用于与自定义参数(标题,http代码等)形成http响应。例如:

return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);

答案 2 :(得分:0)

Spring Boot使用jackson json库将Java对象编组到json对象和从json对象解组 不需要任何显式配置。