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

Mapstruct未为不可变表生成的可选属性选择重载方法

杭涵映
2023-03-14
 error: Can't map property "java.lang.Integer id" to "java.util.Optional<java.lang.Integer> id". Consider to declare/implement a mapping method: "java.util.Optional<java.lang.Integer> map(java.lang.Integer value)".

这是有道理的,谢天谢地,还有一个选项可以生成接受可空参数的方法。此选项生成一个附加的方法,该方法接受一个可为空的参数。但是,不管有没有这种方法,Mapstruct似乎都失败了。

作为一种变通方法,我实现了这个令人讨厌的方法(但在这一点上,我宁愿自己实现映射方法):

@Mapper
public class OptionalMapper {

    public <T> T unwrapOptional(final Optional<T> optional) {
        return optional.orElse(null);
    }

    public <T> Optional<T> wrapIntoOptional(final T value) {
        return Optional.ofNullable(value);
    }

有没有什么方法可以让Mapstruct寻找重载的方法(或者先看到“正确的”方法)?我是走错路了还是错过了什么?谢了!

共有1个答案

巫煌
2023-03-14

目前,编写自定义OptionalMapper是执行Optionals展开的方法。

我不认为那样做是件坏事。支持可选存在一个开放问题

 类似资料:
  • 直接上代码看注释: <?php namespace Yurun\Util\YurunHttp; /** * 所有属性的常量定义 * * PRIVATE_ 开头的为内部属性,请勿使用 */ abstract class Attributes { /** * 客户端参数 */ const OPTIONS = 'options'; /**

  • 我即将使用React制作下一个页面,我找不到如何将可配置属性集放入组件中,例如: 仅当时,我才想在ProgressBar中添加活动属性。 我该怎么做呢? 有一个简单的方法来切换两个选项活动和剥离?像这样的东西: 除了创建属性对象并将其展开{…props}

  • 和标题差不多。我在请求正文中有一个可选对象。但是,如果给定了该对象,则它必须包含几个子属性。 我的OpenAPI组件配置如下所示: 我正在使用express openapi validator来验证这一点。现在,我不明白这是否是express openapi validator包的问题,但可选字段(partner)的必填字段(名称、电话)从未验证过。我可以只提供合作伙伴:{},然后直接插入,或者甚

  • 问题内容: 给出以下代码: 输出(意外)如下: 问题出在第一行,我希望与其他两行相同。此外,我发誓直到最近,编译器仍会为我的普通调用给出模糊的调用警告。但是,使用Java 5和6进行编译和测试会产生相同的结果。 这对我来说是一个重要的问题,因为我有很多代码都使用这种模式,即使用不同类型的重载“默认”参数来选择返回类型并推断所需的转换/解析。谁能解释这是怎么回事? 问题答案: Java始终以相同的方

  • 问题内容: 我试图弄清楚Java如何选择执行哪种方法: 我在这里学到的是 方法签名是根据编译时数据类型确定的 实际调用的方法取决于调用该方法的对象的动态类型。 基于此,前两个调用的结果符合预期。但是,我不理解示例3和4的结果。 它似乎是在Java语言规范中指定的,但我不理解。 问题答案: 但是,我不理解示例3和4的结果。 好吧,让我们单独看一下。 例子3 重要的部分是表达式和的 编译时 类型。 仅

  • 我一直在为使用WooCommerce的客户开发一个电子商务商店,我遇到了一个非常奇怪的问题。我所有的产品都是可变产品,我对它们进行了如下设置:变量1-重量(0,0.5,1.0,1.5,2.0…5.0千克)变量2-单位(0,1,2,3,4,5…10)变量3-切割类型(研磨、切片、整体等)我设置变量的方式使客户必须选择变量1或变量2(重量或单位)和变体3。如果他们选择按重量(重量大于“0”)购买产品,