0

我正在开发 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 中的所有参数都是空或零。

以下是 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;

这是主应用程序的主要内容,您可以看到我如何初始化 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;
    }

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

4

1 回答 1

0

我只是尝试使用BeanUtils.copyPropertiesSpring 框架的方法进行以下操作。似乎工作正常。无法测试,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
于 2018-02-02T05:54:26.613 回答