我设法让泽西声明性超链接工作,但是,我想得到这段代码的结果:
@InjectLink(resource = UserResource.class, method="getUserApplications", bindings ={@Binding(name = "id", value = "${instance.id}")}, style = InjectLink.Style.ABSOLUTE)
private String applications;
是这样的:
"account": {
"applications":{ "href":"https://localhost:8080/IMREST/api/accounts/55fb111629d40123a811ad0e/applications"}
}
而不是:
"account": {
"applications" : "http://localhost:8080/IMREST/api/accounts/55fb111629d40123a811ad0e/applications"
}
有谁知道如何才能做到这一点?
我在想我可以扩展@InjectLink接口,但我不确定它是否会起作用。我目前正在使用Glassfish中的JacksonFeature来编组我的模型对象,到目前为止我用Declamented Hyperlinking看到的唯一定制就是使用Wrapper Objects。我宁愿避开那条路。
答案 0 :(得分:1)
对于任何正在寻找的人,我在另一个问题上找到了答案here from peeskillet(第二个答案)。
TL; DR 我需要实现一个LinkSerializer,我作为一个模块这样做了:
public class LinkSerializerModule extends SimpleModule {
public LinkSerializerModule() {
super("LinkSerializerModule", new Version(0, 1, 0, "alpha", "net.galtech.id", "IMREST"));
this.addSerializer(Link.class, new LinkSerializer());
}
public class LinkSerializer extends JsonSerializer<Link> {
@Override
public void serialize(Link link, JsonGenerator jg, SerializerProvider sp)
throws IOException, JsonProcessingException {
jg.writeStartObject();
jg.writeStringField("href", link.getUri().toString());
jg.writeEndObject();
}
}
}