小编arj*_*ion的帖子

JAX-RS HATEOAS在JSON中使用Jersey,不需要的链接属性

从Jersey 2.9开始,可以通过声明性链接为超媒体驱动的REST API创建链接关系.

这段代码,例如:

@InjectLink(
    resource = ItemResource.class,
    style = Style.ABSOLUTE,
    bindings = @Binding(name = "id", value = "${instance.id}"),
    rel = "self"
)
@XmlJavaTypeAdapter(Link.JaxbAdapter.class)
@XmlElement(name="link")
Link self;
Run Code Online (Sandbox Code Playgroud)

......理论上预计会产生这样的JSON:

"link" : {
    "rel" : "self",
    "href" : "http://localhost/api/resource/1"
}
Run Code Online (Sandbox Code Playgroud)

但是,Jersey会生成不同的JSON,其中包含许多我不需要的属性:

"link" : {
   "rel" : "self",
   "uri" : "http://localhost/api/resource/1",
   "type": null,
   "uriBuilder" : null
}
Run Code Online (Sandbox Code Playgroud)

另请注意href,它使用的是代替uri.我查看了Jersey Link对象的实现并找到了JerseyLink.

我想使用Jersey的声明性链接,而不是推出我自己的实现.我最终使用Jackson注释只是为了忽略其他JerseyLink属性.

@JsonIgnoreProperties({ "uriBuilder", "params", "type", "rels" })
Run Code Online (Sandbox Code Playgroud)

有没有人使用与Jersey的声明性链接并且具有预期的JSON输出(例如,href而不是uri没有额外的Jersey属性)而不必使用JsonIgnoreProperties或其他黑客?

谢谢. …

java rest jax-rs jersey jersey-2.0

21
推荐指数
1
解决办法
1万
查看次数

Ember JS转换到嵌套路由,其中​​所有路由都是视图中的动态段

我们正在使用EmberJS编写应用程序.然而,我们仍然是这个框架的新手,我们很难解决一些看似直截了当的事情.

模型非常简单,有3种模型:Queue,Task和Image.我们对所有路由使用动态URI段,这些模型的路由嵌套在以下形式:: queue_id /:task_id /:image_id.

路由配置方式如下:

App.Router.map(function() {
   this.resource('queue', {path: ':queue_id'}, function() {
      this.resource('task', {path: ':task_id'}, function() {
         this.resource('image', {path: ':image_id'});
      });
   });
}
Run Code Online (Sandbox Code Playgroud)

在HTML的某个地方,我们有这个简单的模板来迭代任务中的所有图像:

{{#each task.images}}
   <li>
      {{#view App.ThumbnailView.contentBinding="this"}}
         <img {{bindAttr src="thumbnail.url"}} />
      {{/view}}
   </li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

以下是缩略图视图的代码:

App.ThumbnailView = Ember.View.extend({
   tagName : 'a',
   click : function(e) {
       var task = //assume this value exists;
       var queue = //assume this value exists;
       var image = //assume this value exists;

       this.get('controller.target.router').transitionTo('image', queue, task, image);
   }
});
Run Code Online (Sandbox Code Playgroud)

最后,这是我们的ImageRoute:

App.Image = Ember.Object.extend(); …
Run Code Online (Sandbox Code Playgroud)

javascript model-view-controller nested-routes ember.js ember-router

11
推荐指数
1
解决办法
7635
查看次数