gpt4 book ai didi

java - 使用 Orika 进行自定义映射

转载 作者:行者123 更新时间:2023-12-02 05:58:22 26 4
gpt4 key购买 nike

我正在使用 Orika Mapper 来映射源类和目标类的字段。

我可以完美地进行一对一映射。

我在 Source 类中有两个字段,例如 dateOfDeparture 和 dateOfArrival。

我必须计算这些日期之间的差异并映射到目标类中的“travelDuration”字段。

以下是映射器类。

package com.tcs.Orika;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.converter.ConverterFactory;
import ma.glasnost.orika.impl.ConfigurableMapper;
import ma.glasnost.orika.impl.DefaultMapperFactory;

public class Mapper extends ConfigurableMapper {
public static void main(String[] args) throws ParseException {

/*Date Calculation*/
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");
String dateOfDeparture = "31-08-1982 10:20:56";
String dateOfArrival = "31-08-1983 10:20:56";
Date date1 = dateFormat.parse(dateOfDeparture);
Date date2 = dateFormat.parse(dateOfArrival);
long diff = date2.getTime() - date1.getTime();
int noOfDays = (int) TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);

/*set values to Source object*/
OrikaMapFrom objectMapFrom = new OrikaMapFrom();
OrikaMapTo objectMapTo = new OrikaMapTo();
objectMapFrom.setSource("Delhi");
objectMapFrom.setDestination("Amsterdam");
objectMapFrom.setDateOfDeparture(date1);
objectMapFrom.setDateOfArrival(date2);

/*Name Mapping when source and destination names are different*/
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(OrikaMapFrom.class, OrikaMapTo.class)
.field("source", "sourcePlace")
.field("destination","destinationPlace")
.field(noOfDays,"travelDuration")--------------->facing error on this line
.register();

/*Value Mapping*/
MapperFacade mapper = mapperFactory.getMapperFacade();
objectMapTo = mapper.map(objectMapFrom, OrikaMapTo.class);
objectMapTo.setTravelDuration(noOfDays);

System.out.println(objectMapTo.getSourcePlace());
System.out.println(objectMapTo.getDestinationPlace());
System.exit(0);
}



}

请告知如何绘制 map (noOfDays,“travelDuration”)。

最佳答案

以下是适合您的情况的方法:

public class Mapper  {      
public static void main(String[] args) throws ParseException {

/*Date Calculation*/
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");
String dateOfDeparture = "31-08-1982 10:20:56";
String dateOfArrival = "31-08-1983 10:20:56";
Date date1 = dateFormat.parse(dateOfDeparture);
Date date2 = dateFormat.parse(dateOfArrival);


/*set values to Source object*/
OrikaMapFrom objectMapFrom = new OrikaMapFrom();
OrikaMapTo objectMapTo = new OrikaMapTo();
objectMapFrom.setSource("Delhi");
objectMapFrom.setDestination("Amsterdam");
objectMapFrom.setDateOfDeparture(date1);
objectMapFrom.setDateOfArrival(date2);

/*Name Mapping when source and destination names are different*/
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(OrikaMapFrom.class, OrikaMapTo.class)
.field("source", "sourcePlace")
.field("destination","destinationPlace")
.customize(new CustomMapper<OrikaMapFrom,OrikaMapTo>() {
@Override
public void mapAtoB(OrikaMapFrom a, OrikaMapTo b, MappingContext mappingContext) {
long diff = a.getDateOfArrival().getTime() - a.getDateOfDeparture().getTime();
b.setTravelDuration((int)TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));

}
})
//.field(noOfDays,"travelDuration")--------------->facing error on this line
.register();

/*Value Mapping*/
MapperFacade mapper = mapperFactory.getMapperFacade();
objectMapTo = mapper.map(objectMapFrom, OrikaMapTo.class);
objectMapTo.setTravelDuration(noOfDays);

System.out.println(objectMapTo.getSourcePlace());
System.out.println(objectMapTo.getDestinationPlace());
System.exit(0);
}
}

希望这能有所帮助。

关于java - 使用 Orika 进行自定义映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24445201/

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