Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不支持的bean类型:未解析的\u类型\u变量,使用泛型时为K_Java_Spring_Maven_Generics_Quarkus - Fatal编程技术网

Java 不支持的bean类型:未解析的\u类型\u变量,使用泛型时为K

Java 不支持的bean类型:未解析的\u类型\u变量,使用泛型时为K,java,spring,maven,generics,quarkus,Java,Spring,Maven,Generics,Quarkus,我正在尝试我的第一个Quarkus应用程序,并且正在从Spring迁移到Quarkus 在Spring中,我创建了一个助手库,在这里我定义了一个通用的standardservice 服务类如下所示: public abstract class AbstractService<M extends AbstractModel, K extends Serializable, R extends JpaRepository<M, K>> { protected R repos

我正在尝试我的第一个Quarkus应用程序,并且正在从Spring迁移到Quarkus

在Spring中,我创建了一个助手库,在这里我定义了一个通用的standardservice

服务类如下所示:

public abstract class AbstractService<M extends AbstractModel, K extends Serializable, R extends JpaRepository<M, K>> {

protected R repository;

public AbstractService() {

}

public Optional<M> get(K id) {
    return repository.findById(id);
}

public Optional<M> exists(M model) {
    return repository.findOne(Example.of(model));
}

public List<M> getAll() {
    return repository.findAll();
}

public M addNew(M newModel) {
    return repository.saveAndFlush(newModel);
}

public boolean delete(K id) {
    try {
        repository.deleteById(id);
        return true;
    } catch (Exception ex) {
        return false;
    }
}

public Optional<M> update(M updateModel) {

    Optional<M> mOptional = repository.findById(updateModel.getId());

    if (mOptional.isPresent())
        repository.saveAndFlush(updateModel);

    return mOptional;
}
}
@Getter
@Setter
@MappedSuperclass
@NoArgsConstructor
@AllArgsConstructor
public abstract class AbstractModel {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private K id;
}
这是控制器:

@Slf4j
@RestController
@RequestMapping("service.api.name")
public abstract class AbstractController<M extends AbstractModel, S extends AbstractService<M, K, R>, K extends Serializable, AMA extends AbstractModelAssembler<M, K>, R extends JpaRepository<M, K>> {

@Value("service.api.name")
protected String apiName;

protected S service;

protected AMA assembler;

public AbstractController() {

}

@GetMapping("/{id}")
@ResponseBody
public Response get(@Context UriInfo uriInfo, @PathVariable(value = "id") K id) {

    Optional<M> optionalModel = service.get(id);

    if (optionalModel.isPresent()) {
        return assembler.singleObject(uriInfo, optionalModel.get(), Response.Status.OK);
    } else {
        return Response.status(Response.Status.NOT_FOUND).build();
    }
}

@GetMapping("/getall")
@ResponseBody
public Response getall(@Context UriInfo uriInfo) {
    return assembler.collection(uriInfo, service.getAll(), Response.Status.OK);
}

@PostMapping("/addNew")
@ResponseBody
public Response addNew(@Context UriInfo uriInfo, @RequestBody M newModel) {

    Optional<M> tmpModel = service.exists(newModel);

    if (tmpModel.isPresent()) {
        return assembler.singleObject(uriInfo, tmpModel.get(), Response.Status.SEE_OTHER);
    } else {
        M model = service.addNew(newModel);
        return assembler.singleObject(uriInfo, model, Response.Status.CREATED);
    }
}

@DeleteMapping("/{id}")
@ResponseBody
public Response delete(@PathVariable(value = "id") K id) {
    if (service.delete(id))
        return Response.noContent().build();
    else
        return Response.status(Response.Status.NOT_FOUND).build();
}

@PutMapping("/update")
@ResponseBody
public Response update(@Context UriInfo uriInfo, @RequestBody M updateModel) {

    Optional<M> mOptional = service.update(updateModel);

    if (mOptional.isPresent()) {
        return assembler.singleObject(uriInfo, mOptional.get(), Response.Status.OK);
    } else {
        return Response.status(Response.Status.NOT_FOUND).build();
    }
}
}
@Slf4j
@RestController
@RequestMapping(“service.api.name”)
公共抽象类抽象控制器{
@值(“service.api.name”)
受保护的字符串名称;
受保护的服务;
受保护汇编程序;
公共控制器(){
}
@GetMapping(“/{id}”)
@应答器
公共响应获取(@Context UriInfo UriInfo,@PathVariable(value=“id”)K id){
可选optionalModel=service.get(id);
if(optionalModel.isPresent()){
返回assembler.singleObject(uriInfo,optionalModel.get(),Response.Status.OK);
}否则{
返回Response.status(Response.status.NOT_FOUND).build();
}
}
@GetMapping(“/getall”)
@应答器
公共响应getall(@Context-UriInfo-UriInfo){
返回assembler.collection(uriInfo,service.getAll(),Response.Status.OK);
}
@后映射(“/addNew”)
@应答器
公共响应addNew(@Context UriInfo UriInfo,@RequestBody M newModel){
可选的tmpModel=service.exists(newModel);
if(tmpModel.isPresent()){
返回assembler.singleObject(uriInfo,tmpModel.get(),Response.Status.SEE_OTHER);
}否则{
M model=service.addNew(newModel);
返回assembler.singleObject(uriInfo、model、Response.Status.CREATED);
}
}
@DeleteMapping(“/{id}”)
@应答器
公共响应删除(@PathVariable(value=“id”)K id){
if(服务删除(id))
返回Response.noContent().build();
其他的
返回Response.status(Response.status.NOT_FOUND).build();
}
@PutMapping(“/update”)
@应答器
公共响应更新(@Context UriInfo UriInfo,@RequestBody M updateModel){
可选的mOptional=service.update(updateModel);
if(mOptional.isPresent()){
返回assembler.singleObject(uriInfo,mOptional.get(),Response.Status.OK);
}否则{
返回Response.status(Response.status.NOT_FOUND).build();
}
}
}
这是我的汇编程序:

@Component
public abstract class AbstractModelAssembler<M extends AbstractModel, K extends Serializable> {

@value("service.api.name")
protected String apiName;

public Response singleObject(@context UriInfo uriInfo, M model, Response.Status status) {

List<Link> links = initLinks(model, uriInfo);

GenericEntity<M> genericEntity =
    new GenericEntity<>(model) {
    };

Link self = Link.fromUriBuilder(uriInfo.getAbsolutePathBuilder())
    .rel("self").build();

return Response.status(status).entity(genericEntity).links(self).build();
}

public Response collection(@context UriInfo uriInfo, List models, Response.Status status) {

List<Link> links = new ArrayList<>();
models.forEach(m -> links.addAll(initLinks(m, uriInfo)));

GenericEntity<List<M>> genericEntity =
    new GenericEntity<>(models) {
    };

Link self = Link.fromUriBuilder(uriInfo.getAbsolutePathBuilder())
    .rel("self").build();

return Response.status(status).entity(genericEntity).links(self).build();
}

private List initLinks(M model, UriInfo uriInfo) {
UriBuilder uriBuilder = uriInfo.getRequestUriBuilder();
uriBuilder = uriBuilder.path(model.getId().toString());
Link.Builder linkBuilder = Link.fromUriBuilder(uriBuilder);
Link selfLink = linkBuilder.rel("self").build();//.toString().replace("${application.api.name}", apiName);
return Arrays.asList(selfLink);
//model.setLinks(Arrays.asList(selfLink));
}
}
@组件
公共抽象类AbstractModelAssembler{
@值(“service.api.name”)
受保护的字符串名称;
公共响应单对象(@context-UriInfo-UriInfo,M-model,Response.Status){
列表链接=初始链接(模型,uriInfo);
一般实体一般实体=
新通用实体(模型){
};
Link self=Link.fromUriBuilder(uriInfo.getAbsolutePathBuilder())
.rel(“self”).build();
返回Response.status(status).entity(genericEntity).links(self.build();
}
公共响应集合(@context-UriInfo-UriInfo,列表模型,Response.Status){
列表链接=新建ArrayList();
models.forEach(m->links.addAll(initLinks(m,uriInfo));
一般实体一般实体=
新通用实体(型号){
};
Link self=Link.fromUriBuilder(uriInfo.getAbsolutePathBuilder())
.rel(“self”).build();
返回Response.status(status).entity(genericEntity).links(self.build();
}
私有列表初始链接(M型号,UriInfo UriInfo){
UriBuilder UriBuilder=uriInfo.getRequestUriBuilder();
uriBuilder=uriBuilder.path(model.getId().toString());
Link.Builder linkBuilder=Link.fromUriBuilder(uriBuilder);
Link selfLink=linkBuilder.rel(“self”).build();/.toString().replace(“${application.api.name}”,apiName);
返回数组.asList(selfLink);
//model.setLinks(Arrays.asList(selfLink));
}
}
尝试构建本机可执行文件时,我收到以下消息:

[信息]-------------------------------------------------------------[信息]生成失败[信息]-------------------------------------------------------------[信息]总时间:9.984秒[信息]完成时间:2020-05-29T10:52:22+02:00[信息]-------------------------------------------------------------[错误]未能执行目标io。quarkus:quarkus maven插件:1.5.0。最终:在项目QuarkusTemplatePlugin上生成(默认):未能生成quarkus应用程序:io.quarkus.builder.BuildException:生成失败:由于错误而生成失败[错误][错误]:构建步骤io.quarkus.arc.deployment.ArcProcessor#generateResources引发异常:java.lang.IllegalArgumentException:不支持的bean类型:未解析的"类型"变量,io.quarkus.arc.processor.Types.getTypeHandle(Types.java:141)处的K[ERROR]在io.quarkus.arc.processor.Types.getTypeHandle(Types.java:91)[错误]io.quarkus.arc.processor.Types.getTypeHandle(Types.java:77)[错误]io.quarkus.arc.processor.Types.getTypeHandle(Types.java:91)[错误]io.quarkus.arc.processor.BeangGenerator.initConstructor(BeangGenerator.java:657)[错误]io.quarkus.arc.processor.BeangGenerator.createConstructor(BeangGenerator.java:555)[错误]在io.quarkus.arc.processor.BeangGenerator.generateClassBean(BeangGenerator.java:297)[错误]在io.quarkus.arc.processor.BeangGenerator.generate(BeangGenerator.java:116)[错误]在io.quarkus.arc.deployment.ArcProcessor.generateResources(ArcProcessor.java:393)java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处的[ERROR]java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[ERROR]java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[]在java.base/java.lang.reflect.Method.invoke(Method.java:566)[错误]在io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:932)[错误]在io.quarkus.builder.BuildContext.run(BuildContext.java:277)[错误]在org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)[错误]位于org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2046)[错误]位于org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(