泽西1.6可以生产:
@Path("/stock")
public class StockResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Stock> get() {
Stock stock = new Stock();
stock.setQuantity(3);
return Lists.newArrayList(stock);
}
}
Run Code Online (Sandbox Code Playgroud)
但不能做同样的事情:
@Path("/stock")
public class StockResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response get() {
Stock stock = new Stock();
stock.setQuantity(3);
return Response.ok(Lists.newArrayList(stock)).build();
}
}
Run Code Online (Sandbox Code Playgroud)
给出错误: A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/json was not found
这可以防止使用HTTP状态代码和标头.
这两个步骤是否必须删除模型?
var model = collection.get(id);
model.destroy();
collection.remove(model);
Run Code Online (Sandbox Code Playgroud)
当从模型中删除模型时,是否有办法销毁模型?
一个项目需要结合使用以下杰克逊注释的组合.那么,有没有办法创建另一个注释,以避免丑陋的复制/粘贴:
public class A {
@JsonProperty("_id")
@JsonSerialize(using=IdSerializer.class)
@JsonDeserialize(using=IdDeserializer.class)
String id;
}
public class B {
@JsonProperty("_id")
@JsonSerialize(using=IdSerializer.class)
@JsonDeserialize(using=IdDeserializer.class)
String id;
}
public class C {
@CustomId // don't repeat that configuration endlessly
String id;
}
Run Code Online (Sandbox Code Playgroud)
更新:我试过这个,没有成功:-(
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonProperty("_id")
@JsonSerialize(using=IdSerializer.class, include=JsonSerialize.Inclusion.NON_NULL)
@JsonDeserialize(using=IdDeserializer.class)
public @interface Id {}
public class D {
@Id
private String id;
}
Run Code Online (Sandbox Code Playgroud) 我可以用灰熊开始并用以下几行在其上部署Jersey webservices.
protected HttpServer create() throws Throwable {
ResourceConfig rc = new PackagesResourceConfig("com.resource", "com.provider");
HttpServer server = GrizzlyServerFactory.createHttpServer(uri, rc);
return server;
}
Run Code Online (Sandbox Code Playgroud)
但有没有办法加载web.xml而不是ResourceConfig?
<web-app>
<servlet>
<servlet-name>Jersey</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.resource, com.provider</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud) Java Servlet API可以将请求转发到同一服务器(相同的主机:端口)中的另一个路径.但是,转发到另一个主机:端口 - 就像代理做 - 是另一个故事.
我试图用Jersey Client做这件事,将ServletRequest - 方法,标题,mediatype和body调整到Jersey ClientRequest(使用不同的基础uri),进行调用,并调整Jersey ClientResponse - 方法,标题, mediatype和body - 到ServletResponse.
手动调整这些对我来说似乎不对.
是不是有纯粹的Servlet API解决方案?或者是一个HTTP客户端,能够在更改host:port时来回调整请求?
Jersey提供两个类来与资源上的注释进行交互:
ResourceFilterFactory定义了一个create方法(实现),AbstractMethod该方法可以访问方法和类注释.
ContainerRequestFilter和ContainerResponseFilter定义了一个filter接受请求/响应的方法(实现),但这些方法只能访问被调用的方法注释,而不是第一类.
我正在尝试实现一个CacheControl注释,它以下列方式定义HTTP缓存头.
@Path("/path")
@CacheControl(maxAge = 172800)
public class Resource
{
@GET
@Path("/{id}")
@CacheControl(mustRevalidate = true)
public Response get(@PathParam("id") Long id)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不想为我的应用程序中定义的每个REST方法创建一个新的CacheControlFilter.
public class FilterFactory implements ResourceFilterFactory
{
@Override
public List<ResourceFilter> create(AbstractMethod method)
{
List<ResourceFilter> filters = newArrayList();
if (isAnnotationPresent(method, CacheControl.class))
filters.add(new CacheControlFilter(method));
return filters;
}
private boolean isAnnotationPresent(AbstractMethod method, Class<? extends Annotation> clazz)
{
return method.isAnnotationPresent(clazz) || method.getResource().isAnnotationPresent(clazz);
}
} …Run Code Online (Sandbox Code Playgroud) Facebook的广告中有一个客观这里列出(PAGE_LIKES,VIDEO_VIEWS,等).
Facebook的见解列表中的用户行为这里列出(like,video_view,等,但也有一些缺失,unlike例如).
问题是:客观和行动不匹配.例如,有一个PAGE_LIKES目标和一个like动作.
在Facebook电源管理器中有一个"结果"列,为每个广告系列提供与广告系列目标匹配的用户操作计数(在下图中获得992like).
似乎在洞察中没有这样的东西(在api和sdk中都没有),那么识别广告系列转换计数的正确方法是什么(在电源管理器中命名为"结果")?
我们必须手动维护PAGE_LIKES <-> like吗?如果是这样,那么正确的映射是什么?
facebook facebook-graph-api facebook-ads-api facebook-php-sdk facebook-marketing-api
创建Collection时,Backbone会为所有人配置一次url.有没有办法在以后更改此URL?
以下示例显示2 POST /product和2 POSTat /product/id/stock.最后一个POST不起作用,Backbone连接id并尝试PUT它,但我不知道为什么.
products.create({ name: 'American Pastoral', price: 8 });
products.create({ name: 'The Grapes of Wrath', price: 10 });
products.each(function(product) {
var id = parseInt(product.get('id'));
stocks.setId(id);
stocks.create({ id: id, quantity: 12 });
}
Run Code Online (Sandbox Code Playgroud)
库存集合:
Backbone.Collection.extend({
url: function() {
return this.url;
},
parse : function(resp) {
return resp.stock;
},
setProduct: function(id) {
this.url = '/product/'+id+'/stock';
}
});
Run Code Online (Sandbox Code Playgroud)
这不行.
有没有办法加载Backbone集合的单个实体(从服务器)?
Backbone.Collection.extend({
url: '/rest/product'
});
Run Code Online (Sandbox Code Playgroud)
以下代码可以加载整个集合collection.fetch()但是如何加载单个模型?Backbone的文档清楚地表明GET可以完成,/collection[/id]但不能如何完成.
使用Jackson,可以轻松禁用给定的所有注释ObjectMapper.有没有办法只禁用一个给定的注释?
// disable all
ObjectMapper mapper = new ObjectMapper()
mapper.disable(MapperFeature.USE_ANNOTATIONS);
// disable one?
ObjectMapper mapper = new ObjectMapper()
mapper.disable(@JsonIgnore);
Run Code Online (Sandbox Code Playgroud)
使用@JacksonAnnotationsInside,我已经定义了一个自定义杰克逊注释,我只希望它在某些情况下使用.
java ×4
jersey ×4
annotations ×3
backbone.js ×3
collections ×3
http ×2
jackson ×2
json ×2
model ×2
facebook ×1
generic-list ×1
grizzly ×1
jaxb ×1
marshalling ×1
rest ×1
servlets ×1
url ×1
web.xml ×1