问题描述
我在服务器端使用Spring Rest API,在客户端使用jersey API。
I'm using Spring Rest API in server side and jersey API in client side.
我正在创建一个屏幕,它将获取最后5个客户兑换交易。
I'm creating a screen where it will fetch last 5 customer redeem transaction.
从服务器端我返回RedeemTransactionDetails列表并在客户端接受相同的内容。
From server side i'm returning list of RedeemTransactionDetails and accepting the same in client side.
服务器端:
@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;
}
}
客户端:
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 ;
}
}
注意:我在pom xml中使用了以下依赖项file
NOTE: I had used the following dependencies in pom xml file
<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>
编辑:
错误日志
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
推荐答案
该错误表示可能没有正确配置JerseyClient来扫描提供程序包。如果'jersey.config.server.provider.packages'属性配置为包含包含JAXB类的'com.prom.via.rest.dto'包,请检查您的web.xml。
The error indicates JerseyClient may not have been configured properly to scan Provider packages. Check your web.xml if 'jersey.config.server.provider.packages' property is configured to include 'com.prom.via.rest.dto' package that contains your JAXB classes.
<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>
此外,SkyWalker指示检查RedeemTransactionDetails是否使用@XmlRootElement注释进行注释。
Also, as SkyWalker indicated check if RedeemTransactionDetails is annotated with @XmlRootElement annotation or not.
这篇关于与MIME媒体类型兼容的已注册邮件正文阅读器是:application / json; charset = UTF-8的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!