泽西声明性超链接自定义生成的URL

时间:2015-09-22 15:00:10

标签: jersey jax-rs

我设法让泽西声明性超链接工作,但是,我想得到这段代码的结果:

@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。我宁愿避开那条路。

1 个答案:

答案 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();
        }
    }
}