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();
}
O problema é que MapStruct vai usar getProductsList().addAll()
. Para evitar isso, você deve usar CollectionMappingStrategy.ADDER_PREFERRED
collectionMappingStrategy
. Ter um olhar para a UserMapper
partir 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
)