gpt4 book ai didi

java - 如何设计一个 View 来模拟 Web 服务调用时的自动转换?

转载 作者:行者123 更新时间:2023-12-02 03:10:08 25 4
gpt4 key购买 nike

我有一个 Web 应用程序,用户客户端在其中调用一个 Web 服务(我们将其称为 svc1),该服务又调用另一个 Web 服务 (svc2) 来获取一些信息数据。

UI 将输入 DTO 发送到 svc1,后者将其转换为 svc2 的输入 MODEL,svc2 然后将输出 MODEL 返回到 svc1,它被转换为输出 DTO 以发送到浏览器。

svc1代码实现如下:

public OutputDto svc1(InputDto dto1){
InputModel model1 = inputAssembler.convertViewToModel(dto1);
Output model2 = svc2.call(model1);
return outputAssembler.convertModelToView(model2);
}

我想知道如何实现一个设计,该设计将在每次 svc1 时调用 convertViewToModel()convertModelToView()方法被执行。我的设计方式是,每个模型/ View 对都有一个汇编器(映射器)类,该类有两个方法,称为 convertViewToModel()convertModelToView()

interface Assembler<S,T>{ 
S convertModelToView(T t);
T convertViewToModel(S s);
}

class InputAssembler<InputDto, InputModel> implements Assembler{
....
}

我正在考虑 AOP,但我认为我错过了一些东西。

最佳答案

您可以尝试使用简单的映射器依赖项,例如 MapStruct ,它具有在两个 Java Bean 之间自动映射的功能。这对于需要大量样板代码将一个 DTO 转换为模型(反之亦然)的情况特别有用。

另一个优点是 Mapstruct 内置了对 spring 和依赖注入(inject)的支持。

所需的依赖项是:

<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.3.0.Beta2</version>
</dependency>

还要注意在 pom 中包含 mapstruct-processor 插件。

然后你可以提供一个接口(interface),例如(不准确,因为我不知道你的 dto 类和字段):

@Mapper public interface OutputMapper {
@Mappings({
@Mapping(target="id", source="input.id"),
@Mapping(target="name", source="input.name")
})
EmployeeDTO inputToOutputDTO(Input entity);
@Mappings({
@Mapping(target="id", source="dto.id"),
@Mapping(target="name", source="dto.name")
})
Employee outputDTOtoInput(OutputDTO dto); }

但对于您的用例,我认为您将需要使用通用类型转换器。您必须使用 java 泛型来为每个对象类型定义泛型转换器。一个示例 i found .

关于java - 如何设计一个 View 来模拟 Web 服务调用时的自动转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56999803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com