gpt4 book ai didi

java - Protobuf、MapStruct 和空值

转载 作者:行者123 更新时间:2023-12-05 03:51:19 24 4
gpt4 key购买 nike

给定这个原型(prototype)

option java_outer_classname = "FooProto";
message Foo {
string bar = 1;
}

这个java类:

public class MyFoo {
String bar;
}

还有这个 Mapper(使用 Mapstruct):

@Mapper
public interface FooMapper() {
FooProto.Foo toProtoFoo(MyFoo myFoo);
}

当我有一个带有空栏的 MyFoo 实例并尝试将其映射到原型(prototype)时,我得到一个 NullPointerException。

这是因为 Mapper 的自动生成代码会为原型(prototype)调用一个自动生成的方法,如下所示:

public Builder setBar(java.lang.String value) {
if (value == null) {
throw new NullPointerException();
}

bar_ = value;
onChanged();
return this;
}

有什么办法可以避免这个问题吗? (这不涉及在映射之前清理 MyFoo 实例,使其没有空值)

最佳答案

您需要使用不同的NullValueCheckStrategy

例如

@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
public interface FooMapper() {
FooProto.Foo toProtoFoo(MyFoo myFoo);
}

这将始终在调用 setBar 之前执行 null 检查

看看Controlling checking result for null properties in bean mapping了解更多信息。

关于java - Protobuf、MapStruct 和空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62954540/

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