无法通过REST API调用返回类

时间:2018-08-01 09:09:07

标签: java rest

我正在研究两个项目,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),因为它不依赖于类

1 个答案:

答案 0 :(得分:0)

您可以在SOAP基本的Web服务调用中直接做到这一点。但是在REST中,您最好使用json结构并将json转换为所需的类对象。您可以使用可用的API轻松地做到这一点。

您可以在下面的链接中找到一些很好的例子:-

Converting JSON data to Java object

希望这会对您有所帮助。