我正在创建一个新的Jersey 2.21,Jackson 2.6.1 REST服务器(我尝试使用Jersey 2.19和Jackson 2.5.3)并希望使用@InjectLink为我的呼叫者提供HATEOAS链接(如'self').最基本的应用程序(取自Jersey doc和Jersey示例应用程序)不起作用,我无法弄清楚原因.
我首先从Jersey文档中获取基本的Widgets类,但返回的JSON或XML只是一个空结构.
XML:
<Widgets/>
Run Code Online (Sandbox Code Playgroud)
JSON:
{}
Run Code Online (Sandbox Code Playgroud)
Widgets.java
package org.glassfish.jersey.examples.linking;
import java.net.URI;
import java.util.List;
import javax.ws.rs.core.Link;
import javax.xml.bind.annotation.XmlRootElement;
import org.glassfish.jersey.linking.InjectLink;
import org.glassfish.jersey.linking.InjectLinks;
@XmlRootElement()
public class Widgets {
@InjectLink(resource=WidgetsResource.class)
URI u;
@InjectLinks({@InjectLink(resource=WidgetsResource.class, rel = "self")})
List<Link> links;
public Widgets() {}
}
Run Code Online (Sandbox Code Playgroud)
我在资源代码中放了一个断点并检查了返回的对象.it.links和it.u都是null.什么也没注入.
WidgetsResource.java
@Path("widgets")
public class WidgetsResource {
@GET
public Widgets get() {
Widgets it = new Widgets();
return it;
}
}
Run Code Online (Sandbox Code Playgroud)
Maven依赖:
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-declarative-linking</artifactId>
<version>${jersey.version}</version>
</dependency> …Run Code Online (Sandbox Code Playgroud)