当前位置: 首页 > 知识库问答 >
问题:

在Spring中将两个对象合并到一个模型类中

胡嘉歆
2023-03-14

我从Rabbitmq中的队列收到了这条json消息:

{
    "type": "NEW",
    "operation": "NEW",
    "id": 1,
    "entity": "DOCUMENT",
    "entityType": "NIE",
    "documents": {
        "id": 1,
        "additionals": {
            "issuing_authority": "Spain",
            "country_doc": "ES",
            "place_of_birth": "",
            "valid_from": "1995-08-09",
            "valid_to": "0001-01-01"
        },
        "code": "X12345",
        "typeDocument": "NIE"
    }
}

然后我需要映射到这个模型类:

public class PeopleDocumentDTO {

    private String processType;
    private String operation;
    private String entity;
    private String entityType;
    private Long id;
    private Document document;

    @Getter
    @Setter
    class Customer {
        private String systemId;
        private String customerId;
    }
    private List<Customer> customers;
}

为此,我在@RabbitListener类中执行了此操作:

@RabbitListener(queues = "${event.queue}")
    public void receivedMessage(Message message) throws JsonProcessingException {

        String json = "";

        json = new String(message.getBody(), StandardCharsets.UTF_8);
        System.out.println(json);

        logger.info("Received message: {}", json);

        ObjectMapper objectMapper = new ObjectMapper();
        PeopleDocumentDTO dto = objectMapper.readValue(json, PeopleDocumentDTO.class);}

另一方面,我有一个服务类,它在customer类中为我提供customer对象,该对象需要添加到我的模型类中,并提供一个特定的id,如下所示:

public Mono<Person> getPerson(Integer id, String GS_AUTH_TOKEN) {
        WebClient webClient = WebClient.create();

        return webClient.get()
                .uri(GET_RELATION_BY_ID + id)
                .header("Accept", "application/json")
                .header("Authorization", GS_AUTH_TOKEN)
                .retrieve()
                .bodyToMono(Person.class)
                .map(person -> {
                    List<CustomerRelation> matches = person.getRelatedCustomers()
                            .stream()
                            .filter(relation -> relation.getSystemId().equals(400) || relation.getSystemId().equals(300) || relation.getSystemId().equals(410))
                            .filter(relation -> relation.getCustomerId().contains("F"))
                            .collect(Collectors.toList());
                    person.setRelatedCustomers(matches);
                    return person;
                });
    }

最后,我的问题是如何将这个对象添加到模型类中?所以我可以在《邮递员》中看到这样的内容:

{
    "type": "NEW",
    "operation": "NEW",
    "id": 1,
    "entity": "DOCUMENT",
    "entityType": "NIE",
    "documents": {
        "id": 1,
        "additionals": {
            "issuing_authority": "Spain",
            "country_doc": "ES",
            "place_of_birth": "",
            "valid_from": "1995-08-09",
            "valid_to": "0001-01-01"
        },
        "code": "X12345",
        "typeDocument": "NIE"
    },
    "id": 1,
    "relatedCustomers": [
        {
            "customerId": "xxx",
            "systemId": 999
        }
    ]
}

共有1个答案

常温文
2023-03-14

您可以订阅Person对象和getRelatedCustomers()并执行dto。setCustomers()

@RabbitListener(queues = "${event.queue}")
public void receivedMessage(Message message) throws JsonProcessingException {

        String json = "";

        json = new String(message.getBody(), StandardCharsets.UTF_8);
        System.out.println(json);

        logger.info("Received message: {}", json);

        ObjectMapper objectMapper = new ObjectMapper();
        PeopleDocumentDTO dto = objectMapper.readValue(json, PeopleDocumentDTO.class);
        
        personServie.getPerson("id", "authToken").subscribe(person -> dto.setCustomers(person.getRelatedCustomers()));
        
}

如有必要,您可以将PeopleDocumentDTO中的客户更改为related客户

 类似资料:
  • 问题内容: 我可以使用通用的特定于Javascript / Coffeescript的习惯用法吗?主要出于好奇。 我有两个数组,一个数组由所需的键组成,另一个数组由所需的值组成,我想将其合并到一个对象中。 问题答案: var r = {}, i, keys = [‘one’, ‘two’, ‘three’], values = [‘a’, ‘b’, ‘c’];

  • 问题内容: 我厌倦了总是不得不编写这样的代码: 或者,如果我不想自己编写代码,请实现一个已经执行过的库。ES6 +肯定会在这方面获救,这将为我们提供类似a 或 那么ES6 +是否提供这种功能?如果尚不存在,那么是否计划了此类功能?如果没有计划,那为什么不呢? 问题答案: 您将可以通过使用Object.assign在ES6中进行浅合并/扩展/分配: 句法: Object.assign( target

  • 问题内容: 我有以下输入-2个json文件,一个是基础文件,第二个包含相同的属性,但值不同,我想合并这些对象。 例如: 第二个文件: 结果应该是这样的: 使用powershell可以做到吗? 问题答案: (请参见下面的更新) 结果: 您可能会考虑不覆盖左值: 在这种情况下,结果将是: 更新2019年11月16日 的参数已经被耗尽,分过和参数(遗憾的重大更改)。好消息是,对象合并的默认参数设置包含在

  • 目前,我有一个节点应用程序,它使用mongoose将对象保存到MongoDB中。我使用的是类似于这样的模型: 它将我的对象保存到名为Registrations的集合中。 我将我的注册保存为: 我还希望在创建该对象时将其保存到另一个具有不同名称的集合中,如registrations_new或类似的内容。我想将此条目复制到新集合中。我尝试在连接字符串中添加另一个集合,这完全破坏了mongo部分,我尝试

  • 我正在使用Spring,但对它的所有功能并不熟悉。寻找将字段从一个Java对象实例复制到另一个对象实例的好方法。我已经看到了如何将属性从一个Java bean复制到另一个Java bean?但我要找的是更具体的,所以下面是详细信息: 假设我有两个类P的实例,源

  • 问题内容: 我有两个从JSON转换的数据对象。两者都非常复杂,我想以类似于jQuery使用扩展合并两个对象的方式来合并它们。 例 JSON 1: JSON 2: 合并成 用PHP对象解决此问题的最佳方法是什么。 问题答案: 将每个JSON字符串解码为一个关联数组,合并结果并重新编码 更新: 如果您有特定的合并要求,则需要编写自己的合并功能。我在下面写了一篇满足您问题中要求的书。如果您有其他未提及的