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

使用自定义映射器方法的spring映射

林德惠
2023-03-14

我有两个对象,除了date成员外,其他成员都相同。在obj1中,date是java.sql.date,obj2.date是long(纪元)。

我需要编写一个映射器来将obj1映射到obj2。这就是我试图做的:

@Named("sqlDateToEpoch")
default long sqlDateToEpoch(Date timestamp) throws ParseException {
    return myUtils.sqlDateToEpoch(timestamp);
}

@Mapping(source = "date", target = "date", qualifiedByName = "sqlDateToEpoch")
Obj2 toObj2(Obj1 source);

List<Obj2> toRecordList(List<Obj1> source);

但是mapperImpl只有自己的日期转换实现:

if (source.getDate() != null) {
    Obj2.setDate(Long.parseLong(source.getDate()));
}

我得到了:

java.lang.NumberFormatException: For input string: "2019-04-02 00:00:00.0"

这种转换的正确方式是什么?

共有1个答案

李鹏
2023-03-14

我认为它不起作用的原因是您的source.getDate()返回的是String而不是java.sql.date。这导致MapStruct使用隐式stringlong转换。

为了解决此问题,您需要确保source.getdate()返回java.sql.date或者添加一个方法,该方法将获得string并返回long

 类似资料:
  • 例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?

  • 以下是我的上下文:我使用byteBuddy动态生成一个类,该类根据外部配置将一个对象转换为另一个对象。我遇到了一些问题,我想找到一个替代方案,这就是我发现MapStruct的方式。 因此,我试图构建简单的映射器,我想知道是否有可能自定义注释以添加转换函数。例如,我想要: 在mapper实现中,我会有如下内容: 如果有人能帮我做到这一点,我将不胜感激,这将节省我很多时间。 提前谢谢。

  • 我有一个映射定义为 其中定义如下: 反向映射是使用处理的。如何为反向映射指定自定义映射?

  • 我想在从AbstractEndPoint派生的endpoint上使用不同的jackson ObjectMapper实例(而不是在其他映射URL上使用的实例)。 为了澄清这个问题,我不想更改或自定义对象映射器,它由不同的URL使用,不同的URL来自AbstractEndpoints(如HealtEndpoint、MetricsEndpoint)。我想专门将新的对象映射器注入到管理endpoint中。

  • 我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N

  • 我有一个要求,在那里我将从2列像天和月的数据,但我想把它转换成一个日期对象,并把它设置成我的bean类。 这是否可能不添加属性到java类? 我尝试检查自定义结果处理程序,但示例不够清晰。在从select方法返回之前,是否有钩子来运行某种自定义处理程序?