当前位置: 首页 > 知识库问答 >
问题:

@响应实体,响应实体Spring返回对象为JSON

卜阳
2023-03-14

我使用的是Spring版本4(Spring data),我想将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);
}

任何机构都可以解释吗?当我需要注释要返回为JSON的对象类时,响应体/响应实体是否自己完成工作?

共有3个答案

毕富
2023-03-14

Spring boot使用jackson json库将java对象编组和解编组到json对象,无需任何显式配置。

易琨
2023-03-14

xmlRootElement用于将对象表示为XML文档中的XML元素。XML与JSON无关
当您使用RestController对类进行注释时,它将类的控制器与每个方法的响应库结合起来。然后,HttpMessageConverter将请求流和响应流进行转换
@ResponseEntity用于使用自定义参数(标头、http代码等)形成http响应。例如:

return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
施越彬
2023-03-14

@RestController本身添加了@响应体注释。您可以在Github问题中看到它

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

这些控制器方法返回简单的POJO集合

您也可以按照以下行和示例从官方文档

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

与@Request estbody和@响应体一样,Spring使用HttpMessageConverter来转换请求和响应流。

 类似资料:
  • 当我从RestController返回POJO时,它在JSON对象中转换。但是当我尝试返回controller返回纯文本。怎么了? 我的RestController:

  • 使用Guzzle,我正在使用JSON格式的一些外部API,通常我获取数据 $data = $request- 但是我无法从这个不同的api中获取数据。数据似乎没有出现在“响应体”中。 这个api调用有效:https://i.ibb.co/80Yk6dx/Screenshot-2.png 这不起作用:https://i.ibb.co/C239ghy/Screenshot-3.png

  • 我使用Spring的return ResponseEntity来返回HTTP响应。 当在实体中传递POJO或MAP时,它将其转换为JSON对象。喜欢 结果可能是 POJO 类(获取器和二次生成器) 我正在用 现在我想要的是,我将在请求中获得响应字段列表。我只想仅使用这些字段响应请求。 对于Ex,如果我收到的响应字段为name, id。那么对象必须只包含这两个。 我不能使用@jsonignore或@

  • 这可能是一个奇怪的问题,尽管我想知道为什么以前没有人提出过这个问题。。。因此,如果有任何无知,请纠正我。 首先,我将Jackson与Spring和@ResponseBody注释结合使用。目前,对于每个请求处理程序,我都返回一个“Response”包装器对象,这是客户机所期望的。这个包装非常简单: 问题是,我不喜欢显式地包装所有请求处理程序的每个返回值。我也不喜欢在单元测试中打开这些响应包装。 相反

  • 我可以使用toEntity()方法返回ResponseEntity,如下所示: 但是我想在返回之前处理响应头。上面的代码将WebClient响应转换为响应实体并立即返回,但我想将其存储在响应实体变量中,处理它,然后返回响应实体。 我提到了这个- 当我试图将其存储在varibale中时,我遇到了这个错误-

  • 我是Java和创建API的新手。我试图简单地发出一个后请求,并得到一个具体的值。以下是我的代码: ProjectResponse类简单地包含: 问题是,id aøwaus 被返回为 (id=空)。即使当我使用“字符串”而不是项目响应时,一切正常,我看到ID已创建。因此,由于某种原因,将响应映射到项目响应类存在问题。 有人知道可能出了什么问题吗?