我使用的是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返回的对象类时。
答案 0 :(得分:1)
@RestController
本身会添加@ResponseBody
注释。您可以在Github Issue
您还可以查看official spring tutorials。在这里,您可以查看以下行和示例:
这些控制器方法返回简单的POJO -
Collection<Bookmark>
, 除了Bookmark
以外的所有情况,add
等等。当一个HTTP请求 进来指定Accept header
,Spring 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对象解组 不需要任何显式配置。