org.mapstruct不与基类一起工作

huangapple go评论110阅读模式
英文:

org.mapstruct don't work with a base class

问题

我有2个类。我的基类:

  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. @Getter
  5. @Setter
  6. public class BaseRequest {
  7. @NotNull
  8. @JsonProperty("dateTransaction")
  9. private String dateTransaction;
  10. @NotNull
  11. @JsonProperty("hourTransaction")
  12. private String hourTransaction;
  13. }

还有我的另一个类。这个类扩展了BaseRequest类。

  1. public class AddClass extends BaseRequest {
  2. @Setter
  3. @Getter
  4. private String additionalData60;
  5. }

当我尝试创建一个映射器来将我的AddClass转换为OtherClass时:

  1. @Component
  2. @Mapper(componentModel = "spring", uses = {})
  3. public interface OtherMapper {
  4. @Mappings({
  5. @Mapping(source = "hourTransaction", target = "timeTransaction"),
  6. @Mapping(source = "dateTransaction", target = "dateTransaction"),
  7. @Mapping(source = "additionalData60", target = "additionalData60"),
  8. })
  9. OtherClass toOtherClass(AddClass addClass);
  10. }

当我运行构建时,我收到了这个错误:

  1. Error:(22,13) java: No property named "dateTransaction" exists in source parameter(s). Did you mean "null"?
英文:

I have 2 classes. My base class:

  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. @Getter
  5. @Setter
  6. public class BaseRequest {
  7. @NotNull
  8. @JsonProperty("dateTransaction")
  9. private String dateTransaction;
  10. @NotNull
  11. @JsonProperty("hourTransaction")
  12. private String hourTransaction;
  13. }

And my other class. This class extends BaseRequest class.

  1. public class AddClass extends BaseRequest {
  2. @Setter
  3. @Getter
  4. private String additionalData60;
  5. }

And When I try create a mapper to cast my AddClass to OtherClass:

  1. @Component
  2. @Mapper(componentModel = "spring", uses = {})
  3. public interface OtherMapper{
  4. @Mappings({
  5. @Mapping(source = "hourTransaction", target = "timeTransaction"),
  6. @Mapping(source = "dateTransaction", target = "dateTransaction"),
  7. @Mapping(source = "additionalData60", target = "additionalData60"),
  8. })
  9. OtherClass toOtherClass(AddClass addClass);
  10. }

When I run my build I received this error:

> Error:(22,13) java: No property named "dateTransaction" exists in source parameter(s). Did you mean "null"?

答案1

得分: 1

MapStruct在使用Lombok时没有问题。

然而,如果您已经根据Lombok更改日志升级到Lombok 1.18.16,则需要添加

lombok-mapstruct-binding

在Gradle中:

  1. annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.1.0"
  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok-mapstruct-binding</artifactId>
  4. <version>0.1.0</version>
  5. </dependency>
英文:

MapStruct works without issues with Lombok.

However, if you have upgraded to Lombok 1.18.16 as per the Lombok Changelog then you need to add

lombok-mapstruct-binding

In Gradle:

  1. annotationProcessor &quot;org.projectlombok:lombok-mapstruct-binding:0.1.0&quot;
  1. &lt;path&gt;
  2. &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
  3. &lt;artifactId&gt;lombok-mapstruct-binding&lt;/artifactId&gt;
  4. &lt;version&gt;0.1.0&lt;/version&gt;
  5. &lt;/path&gt;

huangapple
  • 本文由 发表于 2020年10月17日 02:00:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/64394188.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定