繁体   English   中英

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

[英]@ResponseBody , ResponseEntity Spring return Object as JSON

我正在使用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返回的对象类。

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

您还可以查看官方的春季教程 在这里,您可以查看以下行和示例:

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

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

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

和,

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

xmlRootElement用于将对象表示为XML文档中的XML元素。 XML与JSON无关。
当你通过@RestController注释你的类时,它为每个方法组合了@Controller for class和@ResponseBody 然后HttpMessageConverter从请求和响应流转换。
@ResponseEntity用于与自定义参数(标题,http代码等)形成http响应。 例如:

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

Spring引导使用jackson json库对json对象进行编组和解组java对象,无需任何显式配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM