Tag: jax rs

CXF JAXRS – 如何将Query作为QueryParam传递给Date

我有一个服务定义如下。 public String getData(@QueryParam("date") Date date) 我试图从我的客户端(这是CXF的jaxrs:客户端,而不是通用的HTTP客户端或浏览器)传递一个java.util.Date到它。 我的服务在HTTP URL中收到date为Thu Mar 01 22:33:10 IST 2012 。 由于CXF将无法使用此string创buildDate对象,因此我的客户端收到404错误。 我尝试在服务端使用ParameterHandler ,但我仍然无法成功parsing它,因为我不期望在任何特定格式的date。 根据这篇文章 ,传递Date应该是开箱即用,但我似乎无法得到基本的情况下工作。 我是否需要做任何事情才能成功地将我的客户的Date对象传递给服务? 感谢任何帮助。 谢谢

处理JAX-RS REST API URI版本的最佳方法

我在我的search首先在stackoverflow我无法find任何答案有关我的问题。 我所能find的只是与REST uridevise有关的问题。 我的问题在后端。 假设我们有两个不同版本的REST URI http://api.abc.com/rest/v1/products http://api.abc.com/rest/v2/products 在后端(服务器端代码)上遵循的最佳方法是在基于版本的这两套api上对现有类进行正确的路由,可pipe理性和重用? 我曾经想过使用不同的@Path注释来定义资源类,例如,分别在包的ProductsResource类中分别包含v1和v2的包,define package com.abc.api.rest.v1.products; @Path("/rest/v1/products") public class ProductsResource {…} package com.abc.api.rest.v2.products; @Path("/rest/v2/products") public class ProductsResource {…} 然后有基于版本的实现逻辑。 这种方法的问题是,当我们只是从一组API中改变一个特定的资源api时,我们不得不将其他类复制到v2包中。 我们可以避免吗? 如何写一个自定义注释说@Version&支持它的版本的值? 现在无论是v1还是v2,这两个请求都会转到相同的资源类。 说例如 package com.abc.api.rest.products; @Path("/rest/{version: [0-9]+}/products") @Version(1,2) public class ProductsResource {…} 更新: Jarrod提供了一个API版本控制的build议来处理标题中的版本。 这也是一种方法,但是我期待在遵循基于URI的版本控制时使用最佳实践

Jersey + Jackson JSONdate格式序列化 – 如何更改格式或使用自定义的JacksonJsonProvider

我正在使用Jersey + Jackson为我的应用程序提供REST JSON服务层。 我遇到的问题是默认的date序列化格式如下所示: "CreationDate":1292236718456 起初我以为这是一个UNIX时间戳,但是这太长了。 我的客户端JS库有反序列化这种格式的问题(它支持一堆不同的date格式,但不是我想这个)。 我想改变格式,以便它可以被我的库(例如ISO)消耗。 我该怎么做…我发现了一段代码可以帮助,但是…我把它放在哪里,因为我不控制jackson串行器实例化(泽西岛)? objectMapper.configure( SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); 我也发现这个代码为自定义JacksonJsonProvider – 问题是..我如何使所有我的POJO类使用它? @Provider public class MessageBodyWriterJSON extends JacksonJsonProvider { private static final String DF = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; @Override public boolean isWriteable(Class arg0, Type arg1, Annotation[] arg2, MediaType arg3) { return super.isWriteable(arg0, arg1, arg2, arg3); } @Override public void writeTo(Object target, Class arg1, […]

REST APIdevise – 通过REST获取资源,使用不同的参数,但具有相同的url模式

我有一个有关REST的urldevise的问题。 我在这里find了一些相关的post: 不同的RESTful表示相同的资源 ,在这里: RESTful URL GET资源由不同的领域,但答复是不是很清楚最佳做法是什么,为什么。 这是一个例子。 我有代表“用户”资源的RESTurl。 我可以通过一个ID或一个电子邮件地址来获得一个用户,但是URL表示对于两者都是一样的。 通过大量的博客和书籍,我发现人们以许多不同的方式来做这件事。 例如 阅读这本书,并在一个地方stackoverflow(我似乎无法find链接) GET /users/id={id} GET /users/email={email} 在很多博客上阅读这个练习 GET /users/{id} GET /users/email/{email} 查询参数通常用于过滤由url表示的资源的结果,但我也看到了这种做法 GET /users?id={id} GET /users?email={email} 我的问题是,在所有这些做法中,哪一个最适合开发者使用apis,为什么? 我相信在REST的网页devise和命名规则方面没有任何规定,但我只是想知道应该采取哪条路线来帮助开发人员更好地理解API。 所有帮助赞赏!

Java 8 LocalDate Jackson格式

对于java.util.Date,当我这样做 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy") private Date dateOfBirth; 然后在我发送JSON请求 { {"dateOfBirth":"01/01/2000"} } 有用。 我应该如何做到这一点Java 8的LocalDate字段? 我试过了 @JsonDeserialize(using = LocalDateDeserializer.class) @JsonSerialize(using = LocalDateSerializer.class) private LocalDate dateOfBirth; 它没有工作。 有人可以让我知道什么是正确的方法来做到这一点.. 以下是依赖关系 <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>jaxrs-api</artifactId> <version>3.0.9.Final</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>com.wordnik</groupId> <artifactId>swagger-annotations</artifactId> <version>1.3.10</version> </dependency> <dependency>

如何selectJAX-RS和JAX-WS Web服务实现?

在什么情况下使用一个更好,为什么? 谢谢!

如何使用Java返回部分JSON响应?

我正在构build一个RESTful API,并希望为开发人员提供选项,以便select在JSON响应中返回哪些字段。 这篇博客文章展示了几个API(Google,Facebook,LinkedIn)允许开发者自定义响应的例子。 这被称为部分响应。 一个例子可能是这样的: /users/123?fields=userId,fullname,title 在上面的例子中,API应该返回用户“123”的userId,fullName和title字段。 我正在寻找如何在我的RESTful Web服务中实现这个想法。 我目前正在使用CXF(编辑:和jackson),但愿意尝试另一个JAX-RS实现。 这是我目前所拥有的。 它返回一个完整的用户对象。 我怎样才能返回API调用者想要在运行时基于“字段”paramaeter的字段? 我不想让其他领域为空。 我只是不想退还它们。 @GET @Path("/{userId}") @Produces("application/json") public User getUser(@PathParam("userId") Long userId, @DefaultValue("userId,fullname,title") @QueryParam("fields") String fields) { User user = userService.findOne(userId); StringTokenizer st = new StringTokenizer(fields, ","); while (st.hasMoreTokens()) { // here's where i would like to select only the fields i want to […]

Servlet vs RESTful

今天我读了关于Restful服务。 基本上我所知道的是Restful webservices将在HTTP请求方法上工作,而不是普通的webservice将在SOAP请求上工作。 Restful服务需要什么样的正常的servlet也可以在HTTP方法上工作?

如何在JAX-RS中设置响应头,以便用户看到Excel的下载popup窗口?

我编写了使用REST JAX-RS生成Excel文件的代码,并确认生成的Excel文件位于GlassFish服务器目录中。 但是我的目标是当用户点击button(生成Excel .xls)时,我想下载popup窗口,显示询问用户是否要保存或打开.xls文件,就像其他Web服务一样,下载任何types的文件。 根据我的search,步骤是: 生成Excel .xls(DONE) 写excelstream 在JAX-RS文件中,将响应头设置为类似的东西, String fileName =“Blah_Report.xls”; response.setHeader(“Content-Disposition”,“attachment; filename =”+ fileName); 我的问题是我在JAX-RS文件中做了所有这一切,我没有可用的HttpServletResponse对象。 根据添加响应头到JAX-RS Webservice的答案 他说: 你可以在你的webservice中通过@Context注释来注入对实际HttpServletResponse的引用,并使用addHeader()等来添加你的头文件。 没有示例代码,我无法确切地说明究竟是什么意思。

使用XML或JSON的JAX-RS(泽西岛)自定义exception

我有一个使用泽西build立的REST服务。 我希望能够根据发送到服务器的MIME来设置我的自定义exception作者的MIME。 当接收到application/json时返回application/json ,当接收到application/xml时返回application/xml 。 现在我硬编码application/json ,但这是使XML客户端在黑暗中。 public class MyCustomException extends WebApplicationException { public MyCustomException(Status status, String message, String reason, int errorCode) { super(Response.status(status). entity(new ErrorResponseConverter(message, reason, errorCode)). type("application/json").build()); } } 我可以利用什么上下文来获得当前的请求Content-Type ? 谢谢! 根据答案更新 对于对完整解决scheme感兴趣的任何人: public class MyCustomException extends RuntimeException { private String reason; private Status status; private int errorCode; public MyCustomException(String message, String […]