Tag: jax rs

阅读jersey的ParamConverter中的另一个参数

我已经制作了一个ParamConverter ,当给定一个格式化为Instant的原生ISO-8601的字符串时,它提供一个Instant (Date),或者作为epoch以来的整数毫秒。 这工作正常,但我还需要能够支持其他日期格式(客户很挑剔)。 为了避免经典的dd/mm/yyyy与mm/dd/yyyy歧义,我想让客户指定他们的首选格式作为请求的一部分*。 例如: GET http://api.example.com/filter?since=01/02/2000&dateformat=dd/mm/yyyy 传递给一个看起来像这样的方法: @GET String getFilteredList( final @QueryParam( “since” ) Instant since ) { … } (为清楚起见省略了时间和时区部分) 所以我希望我的ParamConverter能够读取dateformat参数。 我已经能够使用设置ContainerRequestContext属性的filter和AbstractValueFactoryProvider的组合来做类似的事情,但是这需要参数来应用自定义注释,并且不允许它与QueryParam / FormParam / etc一起使用。 ,使它远没那么有用。 有没有办法从ParamConverter中获取其他参数或请求对象本身? [*]在现实世界中,这将来自一系列预先批准的格式,但现在只是假设它们为DateTimeFormatter提供输入 为清楚起见,这是我的代码: public class InstantParameterProvider implements ParamConverterProvider { private static final ParamConverter INSTANT_CONVERTER = new ParamConverter( ) { @Override public final T fromString( final […]

JAXRS客户端找不到邮件正文编写器

我有一个像这样配置的jaxrs客户端: 但是当我发送请求时,我得到以下exception: Caused by: org.apache.cxf.interceptor.Fault: .No message body writer has been found for class : class com.test.RequestObject, ContentType : application/json. at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:646) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:527) … 47 more 我的RestProxy类看起来像这样: @Component public interface RestProxy { @POST @Path(“/getSomething”) String getSomething(RequestObject RequestObject); }

RestEasy客户端所需的jar子

我需要提供一个java REST客户端,它应该包含一个包中所有必需的jar。 我选择RestEasy作为REST框架,因为服务器应用程序是在JBoss上完成的。 到目前为止,我发现的几乎所有示例都使用应用程序容器环境,其中提供了这些lib,因此在编译期间只需要Java EE API或使用Maven构建,因此依赖项会自动解决,这可能是一个好主意,当前的标准方法,但由于项目相关的原因,我需要在lib文件夹中的jar,并能够在构建期间包含一个可执行jar。 所以我的问题是,哪个jar子有必要建立一个可以做类似的简单客户端: ResteasyClient client = new ResteasyClientBuilder().build(); ResteasyWebTarget target = client.target(myURL).queryParam(“param”, “value”); Builder builder = target.request(MediaType.APPLICATION_JSON).header(“user”, “abc”); Invocation invocation = builder.buildGet(); MyResponseObject response = invocation.invoke(MyResponseObject .class);

强制JAX-RS将我的类序列化为JSON对象

我有一个类,它是一个内部列表的装饰器。 我想在我的JAX-RS服务中将此类用作DTO。 其代码如下: @XmlRootElement(name = “movies”) public class MoviesResponse implements List { @XmlElement(name = “movie”) protected List movies; /* tons of delegate methods */ } 我需要同时支持application / xml和application / json。 格式是固定的,它必须是 …在XML中,和 { “movie”: [ {},{} ] } …在JSON中。 XML工作得很好,但JSON看起来像这样: [{},{}] 您可能怀疑,如果我没有实现List接口,它会生成我需要的格式。 所以我猜序列化器是聪明的,并将其视为List,从而将其序列化为一个数组。 但是我需要将它序列化为一个对象。 我该怎么做,实现List接口?

如何解决找不到媒体类型= multipart / form-data错误的MessageBodyWriter

如何为简单的多表单post配置提供程序。 任何建议/指针将不胜感激。 堆栈跟踪: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=multipart/form-data, type=class org.glassfish.jersey.media.multipart.FormDataMultiPart, genericType=class org.glassfish.jersey.media.multipart.FormDataMultiPart. at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:227) at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:149) at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1139) at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:433) at org.glassfish.jersey.test.inmemory.internal.InMemoryConnector.apply(InMemoryConnector.java:214) at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:217) at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:655) pom.xml依赖项: org.glassfish.jersey.test-framework.providers jersey-test-framework-provider-inmemory 2.4 org.glassfish.jersey.media jersey-media-multipart 2.4 org.hamcrest hamcrest-all 1.3 代码: import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.client.Entity; […]

如何使用JAXB将属性对象转换为JSON对象

我想接受并响应REST应用程序中的JSON对象。 我需要发送和接收的数据位于.properties文件中。 我已经阅读过它们,现在它们属于一个Properties对象(来自java.util.Properties )。 有没有一种方法可以编组和解组Properties对象,而无需实现新类? 我在Weblogic服务器中使用Jax-rs API。 @POST @Path(“{id}”) @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public JSONObject getbyID(@PathParam(“id”)JSONObject inputJsonObj) { //marshalling and unmarshalling goes here }

如何使用javax.ws.rs.client.WebTarget从REST客户端发送json对象

我在下面给出了一个POJO,我希望将其作为JSON或XML输出到服务器。 这就是我所做的 客户: ClientConfig config = new ClientConfig(); Client client = ClientBuilder.newClient(config); WebTarget target = client.target(getBaseURI()); public void putFriend(String uri , Friend friend) { System.out.println(friend.toString()); target = target.path(some_path).path(uri); ClientResponse response = target.request(MediaType.APPLICATION_JSON).put(Entity.entity(friend,MediaType.APPLICATION_JSON),ClientResponse.class); } 我在网上找到的例子是使用WebResource。 我不知道如何使用WebTarget。 我所做的是从SO上找到的一些例子中获取,但Entity.entity()给出了未定义的方法实体(friend,String)。 POJO @XmlRootElement public class Friend{ private String friendURI; private String event; private String uri; String getUri() { return uri; […]

REST Webservice返回415 – 不支持的媒体类型

我使用jax-rs和jersey创建了一个REST Web服务,它应该在POST请求中使用JSON。 我的Web服务类看起来像这样: @Path(“/webhookservice”) public class Webhook { @POST @Consumes(MediaType.APPLICATION_JSON) public Response readData (Song song) { // Prints out the song info System.out.println(“SONG INFO \n=======================”); System.out.println(“songname: ” + song.getSongname()); System.out.println(“artist: ” + song.getArtist()); // Repsonse with a HTTP 200 OK Response response = Response.status(200).build(); return response; } } 我的歌class: public class Song { private String […]

JAXB @XmlElements,不同类型但同名?

我有一个Animal类和Animal的扩展名为AnimalExtension。 public class Animal public class AnimalExtension extends Animal 这两个类之间的唯一区别是AnimalExtension有另一个名为animalId的实例变量。 Animal没有这个实例变量。 我也有自己的数据类型,我想编组和解组XML。 此数据类型称为AnimalList。 在AnimalList中,有一个动物列表作为实例变量。 @XmlType(name = “AnimalList”) public class AnimalList{ private List animalList; …. animalList可以包含Animal和AnimalExtension。 但是,在XML上我不希望该元素被命名为AnimalExtension; 我希望他们都拥有Animal的元素名称。 当JAXB知道Animal实际上是AnimalExtension的一个实例时,我只希望显示额外的属性。 所以,如果我有一个列表,看起来像 List animalList = new LinkedList(); AnimalExtension animalExtension = new AnimalExtension(); animalExtension.setAnimalId(1); amimalExtension.setName(“Don”); Animal animal = new Animal(); animal.setName(“Mike”); animalList.add(animalExtension); animalList.add(animal); 我希望XML看起来像 这是我试图做的 @XmlElements( { @XmlElement(name = […]

JAX-RS和java.time.LocalDate作为输入参数

使用JAX-RS和java.time.LocalDate (java8)时出现问题。 我想使用JSON将这样的对象传递给JAX-RS方法: Person { java.time.LocalDate birthDay; } 我得到的例外是: com.fasterxml.jackson.databind.JsonMappingException :找不到类型[simple type,class java.time.LocalDate ]的合适构造函数:无法在[Source: io.undertow.servlet.spec.ServletInputStreamImpl@21cca2c1 ]中实例化JSON对象(需要添加/启用类型信息?) io.undertow.servlet.spec.ServletInputStreamImpl@21cca2c1 ; line:2,column:3] 如何创建某种将json-dates映射到java.time.LocalDate的拦截器? 我已经尝试实现了一个MessageBodyReader ,但是如果LocalDate是另一个类中的一个字段 ,我必须为每个持有LocalDate类编写一个MessageBodyReader (据我所知)。 (Java EE7(仅使用javaee-api,不需要任何第三方依赖),JAX-RS,Java 8,Wildfly 8.2) 有什么建议么?