1

控制器返回 ResponseEntity

@GetMapping("/users/{id}")
public ResponseEntity<UserResource> getUserById{}

用户资源从 RestResource 扩展而来

public class UserResource extends ResourceSupport {}

当我调用其余 API 时,我得到

 {
      "user": {
        "id": 49,
        "firstName": "Admin"
      },
      "links": [
        {...}]
    }

如果没有顶级包装,我如何获得它?像这样?

{
  "id": 49,
  "firstName": "Admin"
}

有趣的是,当我使用 Spring Data Rest 时,返回的数据实际上是后一种,但 SDR 也使用 Spring-HATEOAS。

4

3 回答 3

1

您无需创建ResponseEntity. 只需返回对象:

@ResponseBody
@GetMapping("/users/{id}")
public UserResource getUserById() {
   // your method
   return new UserResource();
}

如果你想使用 HATEOAS,恐怕没有办法将你的有效载荷放在根目录中(不包​​装)。但是您也可以在没有以下内容的情况下返回对象ResponseEntityhttps ://www.baeldung.com/spring-hateoas-tutorial

于 2019-11-04T21:40:05.387 回答
0

您也可以使用自己的扩展 ResourceSupport 的 Resource 对象。

诀窍是您需要在 content 属性上使用 JACKSON 注释:

@JsonUnwrapped
public T getContent() {
    return content;
}
于 2019-11-05T12:43:52.783 回答
0

结果...关键是不要返回您自己的扩展 ResourceSupport 的资源对象。

相反,只需返回 org.springframework.hateoas.Resource ,由于某种原因将被序列化为平面结构,而不是包装。

于 2019-11-04T23:00:45.273 回答