【问题标题】:How to call class from another module in SpringBoot, Javajava - 如何在Spring Boot,Java中从另一个模块调用类
【发布时间】:2021-08-15 11:26:05
【问题描述】:

我有一个 Spring Boot 多模块 gradle 项目,我正在尝试从另一个模块调用类。我有一个HttpDataClient.java 类,我想在另一个模块的DataResolver.java 类中调用它。

HttpDataClient.java

public class HttpDataClient implements DataClient{

    private final static Logger LOGGER = LoggerFactory.getLogger(HttpDataClient.class);

    private final RestTemplate restTemplate;
    private final ObjectMapper objectMapper = new ObjectMapper();

    public HttpDataClient(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @Override
    public DataResponse getData(String dataId) {
        try{
            JsonNode node = restTemplate.exchange(
                    String.format("/data/%s", dataId),
                    HttpMethod.POST,
                    new HttpEntity<>(buildRequest(dataId), headers()),
                    JsonNode.class
            ).getBody();
            return dataResponse(node);
        }catch (HttpStatusCodeException e) {
            String msg = String.format(
                    "Error getting data for dataId: %s",
                    dataId,
                    e.getStatusCode(),
                    e.getResponseBodyAsString());
            LOGGER.error(msg);
            return dataResponse.failed();
        }
    }

    private MultiValueMap<String, String> headers() {
        final LinkedMultiValueMap<String, String> mv = new LinkedMultiValueMap<>();
        mv.set(HttpHeaders.CONTENT_TYPE, "application/json");
        return mv;
    }

    private DataResponse dataResponse(JsonNode node) {
        return DataResponse.dataResponse(
                asString(node, "dataId"),
                asString(node, "dataAuthor"),
                asString(node, "dataAuthorId")
        );
    }

    private JsonNode buildRequest(String dataId) {
        ObjectNode root = objectMapper.createObjectNode();
        root.put("dataId", dataId);
        return root;
    }
} 

所以,这个类应该从Data service 返回一些响应数据。在我想获取响应数据并在其他模块的课堂上做一些事情之后。

我正在尝试这样做:

DataResolver.java

public class DataResolver {

    private final HttpDataClient client;

    public DataResolver(HttpDataClient client) {
        this.client = client;
    }
}

但我尝试使用的HttpGameDataClient 类无法被DataResolver.java 类识别。

我在这里缺少什么? 任何建议表示赞赏。

【问题讨论】:

    标签: java spring-boot gradle


    【解决方案1】:

    确保将您需要的模块作为需要它的模块的依赖项。

    【讨论】:

    • 所以我应该把它放在 build.gradle 来自模块的文件中,它将调用该类?我做到了,我将它添加为implementation project(':data-module') and i am getting this error: projetc,在项目'data' 中找不到路径':data-module'`
    • 我不太了解 gradle,而是使用 Maven。您可以按照此示例进行多模型 gradle 项目 reflectoring.io/spring-boot-gradle-multi-module
    • 谢谢。是的,我缺少对需要它的模块或将调用所需类的模块的依赖。添加了像 api project(":integration:data-module") 这样的正确依赖,现在我可以看到类了。
    【解决方案2】:

    请检查您是否已将 HttpDataClient.class 添加到您的 spring 配置类中。您正在初始化 bean.also,检查您添加了正确的依赖项

    【讨论】:

    • 什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2020-08-15
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    相关资源
    最近更新 更多