【问题标题】:ModelMapper and DozerBeanMapper don't work | Spring Boot REST APIModelMapper 和 DozerBeanMapper 不起作用 | Spring Boot REST API
【发布时间】:2018-01-31 17:47:40
【问题描述】:

我正在开发 Spring Boot Rest Api。我有一个名为“Wypozyczenie”的课程,还有一个名为“WypozyczenieDTO”的课程。我想从 Wypozyczenie 类中提取一些信息(避免嵌套对象)并根据来自 WypozyczenieDTO 的信息返回数据。 我试过 DozerBeanMapper 和 ModelMapper 都没有正确转换我的对象。所有的值都是空或零!我正在调试,并且在应该进行转换的线路上它不起作用。这是发生转换的函数:

private WypozyczenieDto convertToDto(Wypozyczenie wypozyczenie) {
        WypozyczenieDto wypozyczenieDto = mDozerBeanMapper.map(wypozyczenie, WypozyczenieDto.class);
        return wypozyczenieDto;
    }

我正在调试,wypozyczenieDto 中的所有参数都是 null 或零。

这里是 Wypozyczenie 和 WypozyczenieDto 类(没有 getter 和 setter):

public class WypozyczenieDto {

    private Long id;

    @JsonProperty("planowana_data_rozpoczecia")
    private LocalDateTime planowanaDataRozpoczecia;

    @JsonProperty("planowana_data_zakonczenia")
    private LocalDateTime planowanaDataZakonczenia;

    @JsonProperty("faktyczna_data_rozpoczecia")
    private LocalDateTime faktycznaDataRozpoczecia;

    @JsonProperty("faktyczna_data_zakonczenia")
    private LocalDateTime faktycznaDataZakonczenia;

    @JsonProperty("przebieg_rozpoczecia")
    private int przebiegRozpoczecia;

    @JsonProperty("przebieg_zakonczenia")
    private int przebiegZakonczenia;

    @JsonProperty("id_pracownika")
    private Long idPracownika;

    @JsonProperty("id_pojazdu")
    private Long idPojazdu;

    @JsonProperty("status_wypozyczenia")
    private Wypozyczenie.statusyWypozyczenia statusWypozyczenia;

这是 Wypozyczenie 类:

@Entity
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Wypozyczenie {

    //ENUM Type of statusyWypozyczenia
    public enum statusyWypozyczenia{
        ZAREZERWOWANE, WYPOZYCZONE, ZAKONCZONE;
        public static final EnumSet<statusyWypozyczenia> allStatusyWypozyczenia = EnumSet.allOf(statusyWypozyczenia.class);
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(columnDefinition = "datetime2")
    @JsonProperty("planowana_data_rozpoczecia")
    private LocalDateTime planowanaDataRozpoczecia;
    @Column(columnDefinition = "datetime2")
    @JsonProperty("planowana_data_zakonczenia")
    private LocalDateTime planowanaDataZakonczenia;
    @Column(columnDefinition = "datetime2")
    @JsonProperty("faktyczna_data_rozpoczecia")
    private LocalDateTime faktycznaDataRozpoczecia;
    @Column(columnDefinition = "datetime2")
    @JsonProperty("faktyczna_data_zakonczenia")
    private LocalDateTime faktycznaDataZakonczenia;

    @JsonProperty("przebieg_rozpoczecia")
    private int przebiegRozpoczecia;

    @JsonProperty("przebieg_zakonczenia")
    private int przebiegZakonczenia;

    @ManyToOne(fetch=FetchType.LAZY)
    @JsonManagedReference
    private Pracownik pracownik;

    @ManyToOne(fetch=FetchType.LAZY)
    @JsonManagedReference
    private Pojazd pojazd;



    @Enumerated
    @Column(columnDefinition = "smallint")
    @JsonProperty("status_wypozyczenia")
    private statusyWypozyczenia statusWypozyczenia;

    @OneToMany(mappedBy = "wypozyczenie")
    @JsonBackReference
    private List<CzynnoscSerwisowa> czynnosciSerwisowe;

    @OneToMany(mappedBy = "wypozyczenie")
    @JsonBackReference
    private List<CzynnoscEksploatacyjna> czynnosciEksploatacyjne;

这里是 main 应用的 main,你可以看看我是如何初始化 bean 的:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class ApiBdCarRentApplication {


    @Bean
    public DozerBeanMapper mDozerBeanMapper() {
        return new DozerBeanMapper();
    }

    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }

    public static void main(String[] args) {

        System.out.println(Integer.getInteger("4"));
        SpringApplication.run(ApiBdCarRentApplication.class, args);

    }


}

这是 Wypozyczenia 类的控制器:

@RequestMapping("/wypozyczenia")
@RestController
public class WypozyczenieController {

    private WypozyczenieService mWypozyczenieService;
    private DozerBeanMapper mDozerBeanMapper;



    @Autowired
    public WypozyczenieController(WypozyczenieService wypozyczenieService, DozerBeanMapper dozerBeanMapper) {
        mWypozyczenieService = wypozyczenieService;
        mDozerBeanMapper = dozerBeanMapper;

    }

    @GetMapping("")
    public List<WypozyczenieDto> getAllWypozyczenia(){
        List<Wypozyczenie> wypozyczenia = mWypozyczenieService.getAllWypozyczenia();
        return wypozyczenia.stream()
                .map(wypozyczenie -> convertToDto(wypozyczenie))
                .collect(Collectors.toList());
    }

    private WypozyczenieDto convertToDto(Wypozyczenie wypozyczenie) {
        WypozyczenieDto wypozyczenieDto = mDozerBeanMapper.map(wypozyczenie, WypozyczenieDto.class);
        return wypozyczenieDto;
    }

请帮助我。到底是怎么回事?为什么即使在简单的转换级别上也不起作用(我已经在其他类上尝试过)。

【问题讨论】:

    标签: java spring dozer modelmapper


    【解决方案1】:

    我刚刚尝试使用Spring框架的BeanUtils.copyProperties方法进行以下操作。似乎工作正常。无法使用 LocalDateTime 进行测试,因为我没有 Java 8。尝试使用 Date

    public class BeanCopyTest{
        private static WypozyczenieDto convertToDto(Wypozyczenie wypozyczenie) {
           WypozyczenieDto wypozyczenieDto = new WypozyczenieDto(); 
           BeanUtils.copyProperties(wypozyczenie,wypozyczenieDto);
           return wypozyczenieDto;
        }
    
        public static void main(String[] args){
           Wypozyczenie wypozyczenie = new Wypozyczenie();
           wypozyczenie.setId((long)1);
           wypozyczenie.setPrzebiegRozpoczecia(2);
           wypozyczenie.setPrzebiegZakonczenia(3);
           wypozyczenie.setPlanowanaDataRozpoczecia(new Date());
           WypozyczenieDto wypozyczenieDto = convertToDto(wypozyczenie);
           System.out.println("Id = "+wypozyczenieDto.getId());
           System.out.println("Rozpoczecia = "+wypozyczenieDto.getPrzebiegRozpoczecia());
           System.out.println("Zakonczenia = "+wypozyczenieDto.getPrzebiegZakonczenia());
           System.out.println("PlanowanaDataRozpoczecia = "+wypozyczenieDto.getgetPlanowanaDataRozpoczecia());
        }
    }
    

    打印以下结果。

    Id = 1
    Rozpoczecia = 2
    Zakonczenia = 3
    PlanowanaDataRozpoczecia = Fri Feb 02 11:09:48 IST 2018
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 2021-05-07
      • 1970-01-01
      • 2021-10-05
      • 2016-03-27
      相关资源
      最近更新 更多