setborder - seticon java
Los lectores de cuerpo de mensaje registrados compatibles con el tipo de medio MIME son: application/json; charset=UTF-8 (2)
El error indica que JerseyClient puede no haber sido configurado correctamente para escanear paquetes de proveedores. Verifique su web.xml si la propiedad ''jersey.config.server.provider.packages'' está configurada para incluir el paquete ''com.prom.via.rest.dto'' que contiene sus clases JAXB.
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register resources and providers under com.prom.via.rest.dto package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.prom.via.rest.dto</param-value>
</init-param>
</servlet>
Además, como SkyWalker indicó, verifique si RedeemTransactionDetails está anotado con la anotación @XmlRootElement o no.
Estoy usando Spring Rest API en el servidor y jersey API en el lado del cliente.
Estoy creando una pantalla donde buscará las últimas 5 transacciones de canje del cliente.
Desde el lado del servidor, devuelvo la lista de RedeemTransactionDetails y acepto lo mismo en el lado del cliente.
He depurado el código del lado del servidor, devuelve la lista válida, y en el lado del cliente el código de respuesta es 200, mientras que al obtener la entidad obtengo un error del lado del cliente.
Lado del servidor:
@RestController
@RequestMapping("/rest/api")
public class CustomerRestController {
@Autowired private CustomerService customerService;
@RequestMapping(value="/redeemTransactionList/{clientId}/{mobileNumber}/{numOfTransaction}" , method=RequestMethod.POST , produces = "application/json; charset=UTF-8")
public @ResponseBody List<RedeemTransactionDetails> redeemTransaction(@PathVariable(value = "clientId") int clientId, @PathVariable(value = "mobileNumber") String mobileNumber , @PathVariable(value="numOfTransaction") int numOfTransaction) {
LOG.debug("We are in redeemTransaction method for user {} " , clientId);
List<RedeemTransactionDetails> redeemList = null ;
try {
redeemList = customerService.redeemTransactionList(clientId, mobileNumber,numOfTransaction);
} catch (Exception e) {
LOG.debug("Excption while fetching redeemTransaction ");
}
return redeemList;
}
}
Lado del cliente :
public List<RedeemTransactionDetails> getRedeemTransactions(String mobileNumber, String clientId, String numberOfTransaction) {
log.debug("inside authenticate() ");
List<RedeemTransactionDetails> result = null;
try{
webResource = client.resource(uri + "/redeemTransactionList").path(clientId).path(mobileNumber).path(numberOfTransaction) ;
ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class);
if (response.getStatus() != 200) {
log.debug("response.getStatus() : " + response.getStatus() );
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
response.getType() ;
result = (List<RedeemTransactionDetails>) response.getEntity(RedeemTransactionDetails.class);
log.debug("user Details " + result);
}
catch(Exception e){
log.debug(e);
}
return result ;
}
}
NOTA: He utilizado las siguientes dependencias en el archivo pom xml
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
EDITAR:
REGISTRO DE ERRORES
SEVERE: A message body reader for Java class com.prom.via.rest.dto.RedeemTransactionDetails, and Java type class com.prom.via.rest.dto.RedeemTransactionDetails, and MIME media type application/json;charset=UTF-8 was not found
Feb 23, 2017 4:52:17 PM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are:
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
Este problema es un problema conocido y varias respuestas ya están disponibles en .
Ahora le sugiero que siga algunas sugerencias para resolver su problema.
Sugerencia n. ° 1:
Puede agregar el archivo genson jar usando la siguiente dependencia en su archivo pom.xml
<dependency>
<groupId>com.owlike</groupId>
<artifactId>genson</artifactId>
<version>1.4</version>
</dependency>
La documentación se puede encontrar en: https://owlike.github.io/genson/
Luego, limpie su proyecto y compile y luego ejecute.
Enlace de recursos: https://.com/a/25754441/2293534
Sugerencia n. ° 2:
Puede agregar el archivo jersy bundle jar en su archivo pom.xml.
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.3</version>
</dependency>
Esto también puede resolver el problema algunas veces.
Enlace de recursos: https://.com/a/23192776/2293534
Sugerencia n. ° 3:
Verifique que su entidad contiene anotaciones de @XmlRootElement
o no. Si no, entonces por favor agrégalo.
Enlace de recursos: https://.com/a/7388605/2293534
Sugerencia # 4:
¡jonbros sugirió que, en lugar de usar el complemento de ensamblaje para maven, utilizara el plugin de sombras!
Puede leer el problema de lectura y la solución completa desde aquí: http://jersey.576304.n2.nabble.com/issue-with-POST-when-packaging-into-jar-td5460103.html
Enlace de recursos: https://.com/a/4955831/2293534