dda*_*dik 9 java spring spring-boot
我对 Spring 和 Java 整体还是很陌生,我目前正在研究 API。我有这段代码,它访问 MSSQL 数据库,检索结果并应该将其可视化,但它不起作用。我的意思是,如果我只调用过程并可视化结果集,它会正常工作。问题是我无法使用“RatingProcedure”对象。当我尝试获取某个对象的值时,它显示以下错误:
休眠:{call dis_entity.spdcmpracovnici(?,?,?,?)} 2019-09-02 01:56:01.355 WARN 8720 --- [nio-8050-exec-3] .mmaExceptionHandlerExceptionResolver:已解决 [java.lang.lang. ClassCastException: 类 [Ljava.lang.Object; 无法转换为类 com.pproi.dcm.ratingprocedure.RatingProcedure([Ljava.lang.Object; 在加载器“bootstrap”的模块 java.base 中;>com.pproi.dcm.ratingprocedure.RatingProcedure 在加载器的未命名模块中>org.springframework.boot.devtools.restart.classloader.RestartClassLoader @7193df92)]
编码:
@GetMapping("/replacements/{sourceId}/workers")
public ResponseEntity<List<PossibleReplacementResponseModel>> getReplacements(@PathVariable Integer sourceId,
@RequestParam(required = false) Integer targetWorkerId,
@RequestParam(required = false) Integer targetLineId,
@RequestParam(required = false) String targetWorkplaces) {
List<PossibleReplacementResponseModel> response = new ArrayList<>();
// 400 Bad Request
if ((targetLineId != null && targetWorkerId != null) || (targetWorkplaces != null && targetLineId == null))
return ResponseEntity.badRequest().build();
StoredProcedureQuery ratingProcedure = entityManager.createNamedStoredProcedureQuery("dcmrating");
StoredProcedureQuery storedProcedure = ratingProcedure.setParameter("pk_target_worker", targetWorkerId)
.setParameter("pk_target_sdl", targetLineId).setParameter("pk_target_workplaces", targetWorkplaces)
.setParameter("pk_source_sdl", sourceId);
List<RatingProcedure> ratings = storedProcedure.getResultList();
for(RatingProcedure rating : ratings) {
PossibleReplacementResponseModel responseModel = new PossibleReplacementResponseModel();
Optional<Worker> _worker = workerRepository.findById(rating.getPersonalId());
if(_worker.isPresent()) {
Worker worker = _worker.get();
responseModel.setId(worker.getId());
responseModel.setName(worker.getFullName());
responseModel.setSkills(findWorkersSkills(worker));
responseModel.setPhysicalExamination(findWorkersMedicalExaminationEndDate(worker));
responseModel.setExams(findWorkersExams(worker));
responseModel.setRestrictions(findWorkersRestrictions(worker));
responseModel.setRating(rating.getRating());
}
response.add(responseModel);
}
return ResponseEntity.ok(response);
}
Run Code Online (Sandbox Code Playgroud)
我什至可能对解决方案有一个想法!我可能应该像这里看到的那样自定义我的重启类加载器,但是我的技能到此为止,我不知道我应该在文件中指定什么。
有任何想法吗?
非常感谢。
小智 10
java.lang.ClassCastException: class <Class_Name> cannot be cast to class <Class_Name> (<Class_Name> is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader <Class_Name> is in unnamed module of loader 'app')
Run Code Online (Sandbox Code Playgroud)
这与 spring 开发工具包有关。如果不需要,请尝试删除该包。
一个简单的解决方法是通过设置系统属性来禁用重启:
spring.devtools.restart.enabled = false
Run Code Online (Sandbox Code Playgroud)
例如,当使用 spring-boot maven 插件时,以这种方式启动应用程序:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.devtools.restart.enabled=false"
Run Code Online (Sandbox Code Playgroud)
也许这里发生的事情是:正在创建基类的引用,然后对继承的类进行转换。
让我举个例子。假设我们有一个名为“BaseClass”的基类,并且一个类“ChildClass”正在扩展“BaseClass”。
BaseClass bClass = new BaseClass(); // NOTICE HERE -> new BaseClass();
// Somewhere in next code lines
ChildClass childClass = (ChildClass) bClass;
Run Code Online (Sandbox Code Playgroud)
这将引发您提到的错误。
做这个:
BaseClass bClass = new ChildClass(); // NOTICE HERE -> new ChildClass();
// Somewhere in next code lines
ChildClass childClass = (ChildClass) bClass;
Run Code Online (Sandbox Code Playgroud)
我希望这能解决我的问题
| 归档时间: |
|
| 查看次数: |
11598 次 |
| 最近记录: |