Mapa List <String> com Mapstruct de Java POJO para Protobuf (proto3)

Liso :

Eu estou tentando mapear algumas POJOs de Java para Protobuf (proto3). Alguns deles contêm listas. Enquanto listas de mapeamento com POJOs (por exemplo lista) não é problema, eu estou ficando um UnsupportedOperationException.

Exemplo com List<Product>(isto funciona corrctly):

ProductProtobuf.Builder map(Product product);

@Mapping(target = "productsList", source = "products")
ResponseProtobuf.Builder map(Response response);

Exemplo, com List<String>(isso não funciona):

@Mapping(target = "usersList", source = "users")
ResponseProtobuf.Builder map(Response response);

Além disso, tenho algumas Mapper para o construtor:

public ResponseProtobuf.Builder responseBuilder() {
    return ResponseProtobuf.newBuilder();
}

public ProductProtobuf build(ProductProtobuf.Builder builder) {
    return builder.build();
}
Filip:

O problema é que MapStruct vai usar getProductsList().addAll(). Para evitar isso, você deve usar CollectionMappingStrategy.ADDER_PREFERRED collectionMappingStrategy. Ter um olhar para a UserMapperpartir do mapstruct-protobuf3 na mapstruct exemplos repo.

Em poucas palavras você precisa adicionar:

@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED,
    nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)

para o seu mapeador.

Uma informação a respeito de seu construtor, no caso de você estiver usando 1.3.0.Beta1 você não vai precisar dele, como não está fora do suporte caixa para que, em MapStruct agora.

NB: Houve um erro na MapStruct que não estava funcionando corretamente com ProtocolStringList. Este bug foi corrigido no 1.3.0.Beta1. Se você tentar com esta versão deve funcionar (no caso do seu productListé um String)

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=189845&siteId=1
Recomendado
Clasificación