Tag: jax rs

除了@Produces注释之外,Jersey(JAX-RS)如何知道将POJO视为特定的mime类型?

我看到很多Jersey的例子看起来像这样: public class ItemResource { @GET @Path(“/items”) @Produces({“text/xml”, “application/json”}) public List getItems() { List items = new ArrayList(); Item item = new Item(); item.setItemName(“My Item Name!”); items.add(item); return items; } } 但是后来我无法解析Item,以及Jersey知道如何将Item转换为XML或JSON。 我已经看到了非常基本的例子,只返回构造的HTML或XML的字符串,这对我来说更有意义,但我错过了下一步。 我查看了样本,其中一个突出(json-from-jaxb示例),因为对象标有这些类型的注释: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = “”, propOrder = { “flight” }) @XmlRootElement(name = “flights”) 我正在寻找一步一步涵盖这个“翻译”的教程,或者解释如何将POJO翻译为输出为特定的mime类型。 谢谢!

如何在泽西岛列出所有已注册的JAX-RS实体提供商

让我们假设我有一个简单的泽西应用程序, 在github上嵌入了jetty Demo项目,下面是基本代码。 回到jersey1的日子,我有日志消息: мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.PackagesResourceConfig init INFO: Scanning for root resource and provider classes in the packages: ru.varren мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Root resource classes found: class ru.varren.MyResource мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Provider classes found: class ru.varren.JsonProvider мая 07, 2016 5:05:50 AM […]

Jackson序列化:将字段值设置为XML元素名称

我们使用Jackson jax-rs XML内容提供程序在我们基于jax-rs的REST API项目中处理XML内容类型。 在序列化POJO列表时,我们需要从POJO中的字段动态设置xml元素名称。 public class ResponsePOJO { @JacksonXmlProperty @JacksonXmlElementWrapper(useWrapping = false) private List message = new ArrayList(); } public class Message { private String type; // “Error” or “Warning” private String msg; // The actual message } 默认Jackson序列化XML: Error Some random error message Warning Some random warning message 我们的要求,即将类型设置为XML元素名称。 Some random error message […]

在发出请求时,JAX-RS“端点”的行为如何?

有些事情我不确定我理解是否正确,因此,我需要帮助:) 我见过这个: 例子 , @Path(“/resource”) public class Resource { @Context private HttpHeaders headers; @GET public void get(@Context UriInfo uriInfo) { /* use headers or uriInfo variable here */ } } 这是否意味着对于每个请求,转换为“endpoint”的类会创建一个单独的线程? 因为,否则,标题信息将不准确… 你能指出一个(短:))资源,而不是JAX-WS规范,在哪里可以找到关于这个的信息?

JAX-RS非常适合实现REST。 你用什么来用Java调用REST服务?

理想情况下,我正在寻找类似JAX-RS的东西(使用注释来描述我想要调用的服务),但允许调用使用其他技术(而不是JAX-RS)实现的REST服务。 有什么建议吗?

使用CXF上传多个文件和元数据

我需要使用CXF创建一个文件上载处理程序作为REST Web服务。 我已经能够使用以下代码上传包含元数据的单个文件: @POST @Path(“/uploadImages”) @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadImage(@Multipart(“firstName”) String firstName, @Multipart(“lastName”) String lastName, List attachments) { for (Attachment att : attachments) { if (att.getContentType().getType().equals(“image”)) { InputStream is = att.getDataHandler().getInputStream(); // read and store image file } } return Response.ok().build(); } 现在我需要添加对在同一请求中上传多个文件的支持。 在这种情况下,我得到一个带有multipart/mixed内容类型的附件,而不是带有image/jpeg内容类型的附件,它本身包含我需要的单个image/jpeg附件。 我已经看到了使用元数据上传多个JSON或JAXB对象的示例,但是我无法使用二进制图像数据。 我已尝试直接使用MultipartBody,但它只返回multipart/mixed附件,而不是其中嵌入的image/jpeg附件。 有没有办法递归解析multipart/mixed附件以获取嵌入的附件? 我当然可以得到multipart/mixed附件的输入流,并自己解析文件,但我希望有更好的方法。 UPDATE 这看起来像kludgey,但是下面的代码现在已经足够好了。 我希望看到更好的方式。 for (Attachment att : attachments) […]

@QueryParam如何将没有值的参数转换为布尔值“false”?

我想使用像http://www.example.com/rest/foo?bar这样的http://www.example.com/rest/foo?bar ,其中bar查询参数没有任何值,并且它的存在应该表示变量是true还是false 。 目前,缺失值假定为”” (空)并传递给new Boolean() ,后者将其视为false 。 是否有更优雅的方式来定义它,而不是将参数声明为String并自己转换它? 比如像一个类javax.rs.BooleanFlag或类似的?

无法找到MessageBodyReader

我有这个界面: @Path(“inbox”) public interface InboxQueryResourceTest { @POST @Path(“{membershipExternalId}/query”) @Consumes(MediaType.APPLICATION_XML) @Produces(“multipart/mixed”) public MultipartOutput query(@PathParam(“membershipExternalId”) final String membershipExternalId, @QueryParam(“page”) @DefaultValue(“0”) final int page, @QueryParam(“pageSize”) @DefaultValue(“10”) final int pageSize, @QueryParam(“sortProperty”) final List sortPropertyList, @QueryParam(“sortReversed”) final List sortReversed, @QueryParam(“sortType”) final List sortTypeString, final InstanceQuery instanceQuery) throws IOException; } 我已经实现了返回MultipartOutput的方法。 我从Fiddler发布了一个xml查询,我收到的结果没有任何问题。 但我已经为同一个界面做了集成测试,我发送相同的对象,我把响应像: final MultipartOutput multiPartOutput = getClient().query(getUserRestAuth(), 0, 25, null, […]

JAX-RS 2.0通过@NameBinding注释过滤参数

我创建了一些JAX-RS 2.0资源(使用在Servlet容器中运行的Jeresey 2.4)和一个处理身份validation和授权的filter,可以通过@NameBinding注释有选择地应用。 一切都很好。 我希望能够在此注释上定义一些参数(特别是访问每个方法/资源所需的安全权限),这些参数在运行时可用于filter以改变此行为。 我注意到拦截器可以通过javax.ws.rs.ext.InterceptorContext.getAnnotations()执行此操作,但在filter的javax.ws.rs.container.ContainerRequestContext中没有等效项。 有什么想法可以实现吗? 我希望能够做类似以下的事情: @Target({TYPE, METHOD}) @Retention(value = RetentionPolicy.RUNTIME) @NameBinding public @interface Secured { String[] requiredPermissions() default {}; } @Secured @Priority(Priorities.AUTHENTICATION) public class SecurityRequestFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext containerRequestContext) throws IOException { // extract credentials, verify them and check that the user has required permissions, aborting if not […]

用实体抛出的WebApplicationExceptions的ExceptionMapper?

在我们的(遗留)代码库中,我们以不同的方式抛出WebApplicationExceptions。 为了对我们如何处理exception做出一些命令 – 我想为这些WAE(和其他)创建一个ExceptionMapper。 然而,我意识到Jersey的ExceptionMapper只映射了没有被实体抛出的WAE。 例如: throw new WebApplicationException(Response.status(500).build()); ExceptionMapper捕获此exception。 throw new WebApplicationException(Response.status(500).entity(WsResourceUtils.createWSResourceRestError(500, “bla”)).build()); ExceptionMapper不会捕获此exception。 两者都是从代码中的相同点抛出的。 这是我的ExceptionMapper: @Provider public class GeneralExceptionMapper implements ExceptionMapper { private static final Logger logger = LoggerFactory.getLogger(GeneralExceptionMapper.class); @Override public Response toResponse(Throwable e) { logger.error(“Caught a WAE”, e); … } 是否有可能创建一个ExceptionMapper,即使它们的响应已经使用实体构建,它也会捕获WebApplicationExceptions? 我们正在使用Jersey 1.17。 谢谢。