Tag: jax rs

RESTEasy返回的集合中的根元素名称

我在JBoss AS 6中通过RestEasy使用JAX-RS。当我的JAX-RS资源返回一个项集合时(例如通过List),RESTEasy总是使用名称collection作为根元素。 例如 computer 2500 tv 1500 此XML由以下内容生成: @Produces(“application/xml”) @Path(“xml”) @RequestScoped public class MyResource { @GET @Path(“myitems”) public List getMyItems() { return … } } 可以看出,RESTEasy创建的根标记始终是 。 另一方面,泽西岛总是创建一个名称,该名称是列表中包含的元素的复数forms: computer 2500 tv 1500 我知道可以创建一个包装类型并返回而不是List,但这是一个相当精细的解决方法,使代码更复杂。 是否可以轻松指定集合的​​根标记名称?

有没有办法知道在Jersey @__Param fromString处理程序中解析哪个参数?

我正在使用的API已经决定接受UUID作为Base32编码的字符串,而不是UUID.fromString()期望的标准hex,短划线分隔格式。 这意味着我不能简单地将@QueryParam UUID myUuid写为方法参数,因为转换会失败。 我正在通过使用不同的fromString转换器编写自定义对象来解决这个问题,以便与Jersey @QueryString和@FormParam注释一起使用。 我希望能够在fromString方法中访问转换的上下文,以便我可以提供更好的错误消息。 现在,我所能做的就是以下几点: public static Base32UUID fromString(String uuidString) { final UUID uuid = UUIDUtils.fromBase32(uuidString, false); if (null == uuid) { throw new InvalidParametersException(ImmutableList.of(“Invalid uuid: ” + uuidString)); } return new Base32UUID(uuid); } 我希望能够公开哪个参数具有无效的UUID,因此我记录的exception和返回的用户错误非常清楚。 理想情况下,我的转换方法会有一个额外的参数用于细节,如下所示: public static Base32UUID fromString( String uuidString, String parameterName // New parameter? ) { final UUID uuid […]

如何在url中为逗号分隔参数传递rest服务的get方法

我有像这样的网络服务 @GET @Produces(“application/json”) @Path(“{parameter1}/july/{param2},{param3},{param4}/month”) public Month getResult(@PathParam(“parameter1”) String parameter1, @PathParam(“param2”) PathSegment param2 , @PathParam(“param3”) PathSegment param3, @PathParam(“param4”) PathSegment param4) { return action.getResult(parameter1, new Integer(param2.getPath()), new Integer(param3.getPath()), new Integer(param3.getPath())); } 如果我从我的测试类中调用此Web服务,它可以正常工作; 但如果我通过浏览器调用它,我会收到消息,因为无法找到该服务。 我通过浏览器使用的url是 HTTP://本地主机:8080 / Web应用程序/服务/座椅/ mylogin /月/ 1,0,0 /月 如果我使用url作为 HTTP://本地主机:8080 / Web应用程序/服务/座椅/ mylogin /飞/ 1/0/0 /月 并相应地更改服务中的路径它工作正常,但要求是使用逗号而不是斜杠。 我们有什么办法可以在url中使用带逗号分隔参数的web服务吗?

如何在RESTful Web服务中使用jersey框架抛出HTTP 204状态代码?

我正在使用jersey框架来开发RESTful Web服务。 我使用以下代码抛出各种HTTP状态代码和响应: public class RestNoContentException extends WebApplicationException { public RestNoContentException(String message) { super(Response.status(Status.NO_CONTENT) .entity(message).type(“text/plain”) .build()); } } 在使用Firefox Mozilla rest客户端工具测试REST Web服务时,它显示200 OK状态而不是204 NO CONTENT 。 我正在处理其他状态代码,就像我为状态代码204做的那样。 其他状态代码正在rest客户端工具上正确显示,但何时显示204状态代码,它显示200 OK状态代码。 有人可以帮帮我吗? 我错过了什么?

发布大文件时,防止Jersey客户端导致outofmemory错误

当使用Jersey客户端将大文件作为InputStream放置时,看起来该文件的整个内容在被发送到服务器之前被缓冲到内存中。 这会导致大文件出现问题,因为JVM的堆空间不足。 如何在Jersey客户端中阻止此行为? 服务器端的JAX-RS资源方法在发送数据时似乎没有这个问题。 例如: WebResource dataUploadResource = buildDataUploadResource(); dataUploadResource.type(getMimeType()).put(getLargeInputStream());

java如何解码获取url参数收到抛出BeanParam

我收到了对此Web服务的GET响应 @GET @Path(“/nnnnnn”) public Response pfpfpfpf(@BeanParam NNNNNN n) NNNNNclass有: @QueryParam(“parameter”) private String parameter; 对于该parameter有一个get和set。 我在一个带有查询参数的get上发送请求,它正在自动绑定到我的选项NNNNN,一切都很棒。 但是,现在我在查询url中发送日语字符串。 我在发送之前用UTF-8对参数进行编码,我必须使用UTF-8解码它们。 但我的问题是我应该在哪里调用URLDecoder? 我试图在该参数的getter中调用它,但它不起作用,我一直有类似C3%98%C2%B4%C3%98%C2而不是日文字符

注册MessageBodyReader和MessageBodyWriter实现的适当位置是什么?

我为com.ca.tas.crypto.cmp.client.GeneralPKIMessageJaxRsReader实现了Javax WS RS API MessageBodyReader为com.ca.tas.crypto.cmp.client.GeneralPKIMessageJaxRsReader MessageBodyWriter ,这样我就可以轻松地在CMP over HTTP REST API中使用这些类型。 现在,要注册我创建META-INF/services/javax.ws.rs.ext.Providers文件的类型并将类名放在那里。 一切正常,我可以使用API​​进行REST调用,除了: IntelliJ IDEA(或我安装到其中的插件之一)抱怨说 注册的扩展应该实现javax.ws.rs.ext.Providers 在文件中的两行。 基于我在互联网上找到的资源,我认为添加@Provider和@Produces(“application/pkixcmp”)注释就足够了。 我注意到FasterXML Jackson有META-INF/services/javax.ws.rs.ext.MessageBodyReader和META-INF/services/javax.ws.rs.ext.MessageBodyWriter文件,这些文件似乎注册了一个实现接口的类同样。 所以我的问题是: IntelliJ IDEA是正确还是错误,抱怨我没有实现javax.ws.rs.ext.Providers ? 注册MessageBodyReader和MessageBodyWriter实现的正确文件是什么? 什么是权威文档可以启发我这个?

在相同的根上下文中托管静态内容和JAX-RS服务

我们将多个打包为WAR的Java Web应用程序打包在EAR中。 我们的RESTful服务是使用JAX-RS和特定于版本的WAR构建的。 我们希望为每个特定于版本的WAR添加静态内容,但是对于静态内容和RESTful服务API调用使用根上下文(WAR),以便以下所有URL都可以使用: {hostname}/v1/swagger.yaml <– Static Content describing the v1 API {hostname}/v1/orders/{uid} <– JAX-RS RESTful API (v1) {hostname}/v2/swagger.yaml <– Static Content describing the v2 API {hostname}/v2/orders/{uid} <– JAX-RS RESTful API (v2) 以下部署结构是我们目前拥有的,适用于JAX-RS服务,但不适用于静态内容。 换句话说,这些URL有效: {hostname}/v1/orders/{uid} <– JAX-RS RESTful API (v1) {hostname}/v2/orders/{uid} <– JAX-RS RESTful API (v2) 但问题是这些URL无法访问: {hostname}/v1/swagger.yaml <– Static Content describing the v1 API […]

JEE无法运行JAX-RS WebService骨架应用程序

我正在使用Windows,NetBeans 8.0.2,GlassFish 4.1。 我无法让我的示例JAX-RS应用程序运行。 这是pom.xml: 4.0.0 com.wld HelloWebService war 1.0-SNAPSHOT HelloWebService http://maven.apache.org com.sun.jersey jersey-server 1.8 junit junit 3.8.1 test org.glassfish.metro webservices-rt 2.3 HelloWebService maven-war-plugin 2.6 src/main/webapp/WEB-INF/web.xml UTF-8 1.8 1.8 和web.xml: Restful Web Application jersey-serlvet com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages com.wld.rest 1 jersey-serlvet /rest/* 这是我的控制台输出: NetBeans: Deploying on GlassFish Server 4.1 profile mode: false debug mode: false force redeploy: […]

JAX-RS接受图像作为输入

很长一段时间以来,我一直在为我的开发需求开发JAX-RS Web服务。 到目前为止我编写的所有方法都接受java字符串或原始类型作为输入。 这种方法的一个例子: @POST @Path(“MyMethod”) @Produces(MediaType.APPLICATION_JSON) public String MyMethod(@FormParam(“username”)String username, @FormParam(“password”)String passowrd) 我现在要做的是接受图像作为输入。 我读了很多关于此的文章。 有人建议接受base64编码作为输入,其他建议接受实际的InputSteam。 但是,我还没有看到关于如何接受InputStream的完整示例。 我读到了@consumer注释和@Provider,但我还是无法绕过它。 是否有文章,文档或示例以某种方式引导我走向这个? 即一步一步的过程,如何实施而不是显示理论。 我知道base64编码有效,但出于好奇,我想知道其他方法是如何工作的……提前谢谢。