- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在学习有关 Spring REST 的教程,并尝试将 HATEOAS 链接添加到我的 Controller 结果中。
我有一个简单的用户类和一个 CRUD Controller 。
class User {
private int id;
private String name;
private LocalDate birthdate;
// and getters/setters
}
服务:
@Component
class UserService {
private static List<User> users = new ArrayList<>();
List<User> findAll() {
return Collections.unmodifiableList(users);
}
public Optional<User> findById(int id) {
return users.stream().filter(u -> u.getId() == id).findFirst();
}
// and add and delete methods of course, but not important here
}
一切正常,除了在我的 Controller 中,我想将所有用户列表中的链接添加到单个用户:
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public List<Resource<User>> getAllUsers() {
List<Resource<User>> userResources = userService.findAll().stream()
.map(u -> new Resource<>(u, linkToSingleUser(u)))
.collect(Collectors.toList());
return userResources;
}
Link linkToSingleUser(User user) {
return linkTo(methodOn(UserController.class)
.getById(user.getId()))
.withSelfRel();
}
这样对于结果列表中的每个用户,都会添加指向用户本身的链接。
链接本身创建的很好,但是生成的 JSON 中有多余的条目:
[
{
"id": 1,
"name": "Adam",
"birthdate": "2018-04-02",
"links": [
{
"rel": "self",
"href": "http://localhost:8080/users/1",
"hreflang": null,
"media": null,
"title": null,
"type": null,
"deprecation": null
}
]
}
]
空值字段(hreflang
、media
等)是从哪里来的,为什么要添加?有没有办法摆脱它们?
在建立指向所有用户列表的链接时它们不会出现:
@GetMapping("/users/{id}")
public Resource<User> getById(@PathVariable("id") int id) {
final User user = userService.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
Link linkToAll = linkTo(methodOn(UserController.class)
.getAllUsers())
.withRel("all-users");
return new Resource<User>(user, linkToAll);
}
最佳答案
为了进一步引用,以防其他人偶然发现这一点,我想通了:我在 application.properties
中添加了一个条目,即
spring.jackson.default-property-inclusion=NON_NULL
为什么这对 Link
对象是必需的,但对 User
不是必需的,我不知道(也没有深入研究)。
关于java - Spring Hateoas ControllerLinkBuilder 添加空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49615358/
我目前正在尝试对部分 URL 进行编码,但不是全部 这是一个示例: http://localhost:8080/resourceSearch?type=http%3A%2F%2Fexample.com
我希望我的回复包括以下内容: "keyMaps":{ "href":"http://localhost/api/keyMaps{/keyMapId}", "templated":true }
我正在尝试使用 spring-hateoas 将 HATEOAS 应用于我的 spring boot 应用程序.在我将我的 REST 调用包装在 HystrixCommand 之前,这一直很好用: @
我正在学习有关 Spring REST 的教程,并尝试将 HATEOAS 链接添加到我的 Controller 结果中。 我有一个简单的用户类和一个 CRUD Controller 。 class U
我正在尝试将 Spring HATEOAS 合并到现有的服务工具和 REST API 中。但是,我遇到的问题之一是 ControllerLinkBuilder 似乎删除了尾部斜杠(这是由于现有约束的要
设置:所以我有一个用 java 编写的 RESTfull API,使用 spring-boot 和 spring-hates 添加链接到资源(超媒体驱动的 RESTful Web 服务)。我拥有的一切
Spring HATEOAS 提供了得心应手的ControllerLinkBuilder创建指向 Controller 方法的链接,这些链接将作为 href 添加到返回给客户端的 JSON/XML 中
在使用 ControllerLinkBuilder 和 methodOn 功能时,我不明白的一件事是,当您的 Controller 具有这样的方法签名时,您应该做什么: public HttpEnti
我正在尝试调用 Spring 的 ControllerLinkBuilder.methodOn()使用非 String 类型,它总是失败。而我不知道是哪种Converter使用以及在哪里注册。 这是我
我在 Boot 应用程序中使用 Spring Hateoas 以避免在 View 中手动创建链接。它在 Thymeleaf View 中工作得很好,当 Controller 调用服务发送同样由 Thy
我在 spring Async 方法中调用 ControllerLinkBuilder.linkTo 方法,但它无法找到当前请求。 service.setUrl(linkTo(Controller.c
从 websocket 调用 ControllerLinkBuilder.linkTo 时出现以下错误。 java.lang.IllegalStateException: Could not fin
我是一名优秀的程序员,十分优秀!