Java 11 + Spring Boot + HATEOAS + JAXBException:类***或其任何超类都知道此上下文

问题描述 投票:0回答:1

我正在尝试实现一个简单的服务,并使用spring-boot中的HATEOAS资源来显示链接。当服务运行时,它会在控制台中抛出一条WARN消息,其中包含以下内容:

javax.xml.bind.JAXBException:类com.in28minutes.rest.webservices.restfulwebservices.user.User或其任何超类都知道此上下文

我正在使用JDK 11,这迫使我添加依赖项,因为我得到了一个ClassNotFoundException:“org.glassfish.jaxb:jaxb-runtime”

但是在添加了依赖项之后,spring Resource HATEOAS类无法进行编组。

public class User {
    private Integer id;

    @Size(min=2, message="The name should have at least 2 characters")
    private String name;

    @Past
    private LocalDate birthDate;

    public User() {
    }

    public User(Integer id, String name, LocalDate birthDate) {
        super();
        this.id = id;
        this.name = name;
        this.birthDate = birthDate;
    }
...
}
@GetMapping("/users/{id}")
public Resource<User> retrieveUser(@PathVariable("id") int theId) {
    User aUserResult = service.findOne(theId);

    if (aUserResult == null) {
        throw new UserNotFoundException("id-" + theId);
    }

    Resource<User> aUserResource = new Resource<User>(aUserResult);

    ControllerLinkBuilder aLinkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
    aUserResource.add(aLinkTo.withRel("all-users"));
    return aUserResource;
}
java spring-boot jaxb spring-hateoas java-11
1个回答
1
投票

奇怪的是,这与浏览器有关。如果使用客户端(如“curl”而不是浏览器)调用端点,它应该可以工作。对我有帮助的解决方法 - 添加:

 , produces="application/json; charset=UTF-8"

GetMapping()

更多细节:https://github.com/spring-guides/tut-rest/issues/64

© www.soinside.com 2019 - 2024. All rights reserved.