我们已经创建了Jersy REST服务。 我们将返回带有10个字符串字段和一个哈希映射的响应对象,格式如下面的代码片段所示。
我们可以收到所有10个字符串字段值。
当从客户端程序访问HashMap时,我们也可以看到带有键/值的HashMap。
从客户端程序访问时,HashMap中的CustomObject变为String。
所以它抛出异常
Listcom.tetherfi.restful.model.AppTypeData@2dc0f069 测试 错误:java.lang.ClassCastException:java.lang.String无法强制转换为com.tetherfi.restful.model.AppTypeData。
我们使用Moxy进行映射。请告知是否有办法保留对象值。
来自Jersy服务的响应对象
@XmlRootElement 公共类ServiceRespParams {
private String param1;
private String param2;
private String param3;
private String param4;
private String param5;
private HashMap<String,ArrayList<AppTypeData>>hm;
public HashMap<String, ArrayList<AppTypeData>> getHm() {
return hm;
}
public void setHm(HashMap<String, ArrayList<AppTypeData>> hm) {
this.hm = hm;
}
客户端代码
public class Client {
public ServiceResponse postRequest(ServiceRequest request) {
Logger logger = Logger.getLogger("JerseyClient");
ServiceResponse serviceResponse = null;
WebTarget webTarget = null;
Response response = null;
// creating client with MOXy JSON
Client client = ClientBuilder.newClient();
try {
String url = "http://localhost:9080/Rest_ProxyLayer/webapi/doc01";
logger.info("Sending Request.... "+url);
webTarget = client.target(url).property(ClientProperties.CONNECT_TIMEOUT, 1000)
.property(ClientProperties.READ_TIMEOUT, 1000);
logger.info("Request Sent...");
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
response = invocationBuilder.get();
logger.info("Response Status :"+response.getStatus());
serviceResponse = response.readEntity(ServiceResponse.class);
System.out.println("Response from service"+ serviceResponse.getHm().get("CreditCard").get(0).getParam1());
} catch (Exception e) {
logger.error("Error!! Check connection..", e);
e.printStackTrace();
}
return serviceResponse;
}
}
尝试访问该方法时抛出类强制转换异常。 System.out.println(“来自服务的响应”+ serviceResponse.getHm()。get(“CreditCard”)。get(0).getParam1());
Rest服务的输出。 Hashmap条目如下。它显示了对象但似乎转换为字符串。
HM:{CreditCard = [com.tetherfi.restful.model.AppTypeData@1b6c278e,com.tetherfi.restful.model.AppTypeData@208f5a00]}
由于 Vinoth