我正在研究两个项目,1)微服务(MSA)和2)SDK
我正在从MSA向SDK发送一个GET请求,我希望在那里获得一个JAVA类作为返回类型,但我只是以字符串的形式返回该类的FQDN
MSA代码:
@SuppressWarnings("unchecked")
@Override
public Map<String, Class<?>> getSettingClasses() {
try {
Map<String, String> queryParam = Maps.newHashMap();
queryParam.put("sid", userContext.getServiceId().toString());
Map<String, Class<?>> map = restClient.get(
commonSettingService.getApplicationCode(commonSettingService.getServiceDefId(userContext
.getServiceId())), MasterMaintenanceEndpoint.GET_SETTING_CLASSES, Map.class,
userContext.getSessionToken(), queryParam);
return map;
} catch (Exception e) {
logger.error("Can not connect to Master Maintenance service", e);
return null;
}
}
SDK代码:
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public Map<String, Class<?>> getSettingClasses() {
Map<String, Class<?>> clazz = Maps.newHashMap();
String serviceDefId = getProviderService().getServiceDefId();
String serviceId = userContext.getServiceId().toString();
clazz.put("dtoClass", getProviderService().getDtoClass());
clazz.put("dtoIndexClass", getProviderService().getIndexDtoClass());
return clazz;
}
服务代码:
Map<String, Class<?>> masterMaintenanceClassMap = webApiService.getSettingClasses();
Class<?> dtoClass = masterMaintenanceClassMap.get("dtoClass");
Class<?> dtoIndexClass = masterMaintenanceClassMap.get("dtoIndexClass");
在SDK代码中,getProviderService().getDtoClass()
返回一种java.lang.Class
类型,但是在服务代码中,masterMaintenanceClassMap.get("dtoClass")
的计算结果是一种String
类型,其值实际上是该类的FQDN。
REST是否限制返回类?有解决方法吗?
注意:我无法在服务代码中执行Class.forName(fqdn)
,因为它不依赖于类
答案 0 :(得分:0)
您可以在SOAP基本的Web服务调用中直接做到这一点。但是在REST中,您最好使用json结构并将json转换为所需的类对象。您可以使用可用的API轻松地做到这一点。
您可以在下面的链接中找到一些很好的例子:-
Converting JSON data to Java object
希望这会对您有所帮助。