Я занимаюсь разработкой RESTful API на Java для класса.Я использую JAX-RS. Я следовал этому уроку "JAX-RS Jersey" .Все работает, как ожидалось, кроме тех случаев, когда я пытался выполнить response.readEntity(MyTable.class)
для создания нового Object
класса MyTable
, который я создал.Это прекрасно работает для String.class
, если он читает всю информацию JSON
в виде строки, но не может проанализировать ее для нового Object
моего пользовательского класса.Я много читал об этом, и я установил все установщики и получатели для атрибутов и пустой constructor
, но он не может анализировать информацию для нового объекта моего пользовательского класса.Я получаю ошибку MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=class com.beans.MyTable, genericType=class com.beans.MyTable.
.
MyTable.java
private Integer id;
private String name;
public MyTable() {
}
public MyTable(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "MyTable [id=" + id + ", name=" + name + "]";
}
MyClient.java
Client client = ClientBuilder.newClient( new ClientConfig().register( LoggingFeature.class ) );
WebTarget webTarget = client.target("http://localhost:8080/App/rest").path("test");
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
Response response = invocationBuilder.get();
//Does not work and gives error
MyTable table = response.readEntity(MyTable.class);
System.out.println(table.toString());
MyService.java
@PermitAll
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response test() {
MyTable table = new MyTable();
table.setId(1);
table.setName("mesa de teste");
GenericEntity<MyTable> genericEntity = new GenericEntity<MyTable>(table, MyTable.class);
return Response.ok().entity(genericEntity).build();
}
ОШИБКА
Exception in thread "main" org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=class com.beans.MyTable, genericType=class com.beans.MyTable.
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:231)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:808)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:326)
at org.glassfish.jersey.client.InboundJaxrsResponse$1.call(InboundJaxrsResponse.java:115)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:419)
at org.glassfish.jersey.client.InboundJaxrsResponse.runInScopeIfPossible(InboundJaxrsResponse.java:267)
at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:112)
at com.client.MyClient.main(MyClient.java:31)