Eine Dozer-Map-Ausnahme im Zusammenhang mit Spring Boot Devtools

Ich bin auf eine sehr seltsame Ausnahme gestoßen und weiß nicht, wie ich den Grund finden soll.

Betriebswirtschaftlicher Hintergrund: Waren hinzufügen und in der Zwischenzeit ist es eine Preisliste, eine Ware hat 5 Preise für Benutzer mit Diff-Level.

Konvertieren Sie im Controller zuerst goodForm mit dem Dozer in Waren und rufen Sie dann goodsService auf, um Waren zu sparen. In goodsService nach dem Sichern von Waren, Durchqueren der Warenpreisliste und Auffüllen der WarenId zum Warenpreis,

GoodsForm:
@Mapping("priceList")
List<GoodsPriceForm> goodsPriceFormList;
Goods:
List<GoodsPrice> priceList;

Controller: 
Goods goods = BeanMapper.map(goodsForm, Goods.class);
goodsService.saveGoods(adminId, goods);

GoodsService:
goodsDao.save(goods);
goods.getPriceList().forEach(p -> p.setGoodsId(goods.getId()));
goodsPriceDao.save(goods.getPriceList());

Aber es wird eine Ausnahme ausgelöst:

2015-11-27 17:10:57,042 [http-nio-8081-exec-8] ERROR o.a.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: com.foo.goods.model.GoodsPrice cannot be cast to com.foo.goods.model.GoodsPrice] with root cause
java.lang.ClassCastException: com.foo.goods.model.GoodsPrice cannot be cast to com.foo.goods.model.GoodsPrice
at com.foo.goods.service.GoodsService$Lambda$11/310447431.accept(Unknown Source) ~[na:na]
at java.util.ArrayList.forEach(ArrayList.java:1249) ~[na:1.8.0_51]
at com.foo.goods.service.GoodsService.saveGoods(GoodsService.java:34) ~[classes/:na]

Diese Fehlermeldung hat mich sehr verwirrt. Außerdem schreibe ich einen Unit-Test, der dies wiederholen wollte, aber fehlschlug.

GoodsForm form = new GoodsForm();
form.setGoodsPriceFormList(Lists.newArrayList(new GoodsPriceForm((byte) 1, BigDecimal.valueOf(10)),
new GoodsPriceForm((byte) 2, BigDecimal.valueOf(9)),
new GoodsPriceForm((byte) 3, BigDecimal.valueOf(8))));

Goods goods = BeanMapper.map(form, Goods.class);
goods.getPriceList().forEach(p -> p.setGoodsId(goods.getId()));

Führen Sie diesen Einheitentest aus, er wurde in Ordnung ausgeführt. Warum ist es in einer realen Web-Situation (Spring Boot + Jpa) fehlgeschlagen, aber in einer Unit-Test-Situation ist es in Ordnung?

Controller:
System.out.println("PriceList: " + goods.getPriceList().getClass().getClassLoader());//PriceList: null
System.out.println(goods.getPriceList().get(0).getClass().getClassLoader()); //java.lang.ClassCastException: com.foo.goods.model.GoodsPrice cannot be cast to com.foo.goods.model.GoodsPrice

Wenn ich ein gepacktes Glas erstellt habe, dann führe dieses Glas aus

java -jar target/myapp.jar

In diesem Fall ohne obige Ausnahme.

Und ich habe spring-boot-devtools in pom.xml kommentiert und dann die Anwendung ohne Ausnahme gestartet.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage