ジェネリックパラメータを持つJackson RESTエンドポイントで使用するDTOを提供したいとします。Jackson Javaの汎用パラメータ
ビルド時にこのエラーが発生します。
[ERROR] Failed to execute goal org.bsc.maven:maven-processor-plugin:1.3.6:process (default) on project metrics-server: java.lang.UnsupportedOperationException: Unknown parameterized type: T. Available types in this context: {V=null, K=java.lang.String}. -> [Help 1]
public class ValidationRequest<T> {
private final Map<String, T> columnValues;
@JsonCreator
public ValidationRequest @JsonProperty("columnValues") Map<String, T> columnValues) {
this.columnValues = columnValues;
}
}
私の使い方のようになります。私は、オリジナルのポストに、コンストラクタの名前を変更した
Map<String, Double> testColumnValue = new HashMap<>();
testColumnValue.put("sum", 1.0);
ValidationRequest validationRequest = new ValidationRequest(columnValues);
user.validate(validationRequest); // this is a REST request
Can anyone help me figure out if this is possible?
Here is the stack trace:
[ERROR] execute error
java.lang.RuntimeException: java.lang.UnsupportedOperationException: Unknown parameterized type: T. Available types in this context: {V=null, K=java.lang.String}.
at com.sun.tools.javac.main.Main.compile(Main.java:553)
at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.executeWithExceptionsHandled(AbstractAnnotationProcessorMojo.java:248)
at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.execute(AbstractAnnotationProcessorMojo.java:129)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.UnsupportedOperationException: Unknown parameterized type: T. Available types in this context: {V=null, K=java.lang.String}.
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.getDeclaredTypeForTypeVariable(AnnotationProcessor.java:711)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.visitTypeVariable(AnnotationProcessor.java:694)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.visitTypeVariable(AnnotationProcessor.java:461)
at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1337)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.acceptOrRecurse(AnnotationProcessor.java:566)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.visitDeclared(AnnotationProcessor.java:543)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.visitDeclared(AnnotationProcessor.java:461)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:944)
at org.versly.rest.wsdoc.AnnotationProcessor.jsonTypeForDeclaredType(AnnotationProcessor.java:418)
at org.versly.rest.wsdoc.AnnotationProcessor.access$300(AnnotationProcessor.java:63)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.recurseForJsonType(AnnotationProcessor.java:667)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.addFieldFromBeanMethod(AnnotationProcessor.java:646)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.buildTypeContents(AnnotationProcessor.java:616)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.buildType(AnnotationProcessor.java:575)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.visitDeclared(AnnotationProcessor.java:560)
at org.versly.rest.wsdoc.AnnotationProcessor$TypeVisitorImpl.visitDeclared(AnnotationProcessor.java:461)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:944)
at org.versly.rest.wsdoc.AnnotationProcessor.jsonTypeForDeclaredType(AnnotationProcessor.java:418)
at org.versly.rest.wsdoc.AnnotationProcessor.jsonTypeFromTypeMirror(AnnotationProcessor.java:391)
at org.versly.rest.wsdoc.AnnotationProcessor.buildRequestBody(AnnotationProcessor.java:288)
at org.versly.rest.wsdoc.AnnotationProcessor.buildRequestBodies(AnnotationProcessor.java:284)
at org.versly.rest.wsdoc.AnnotationProcessor.buildParameterData(AnnotationProcessor.java:254)
at org.versly.rest.wsdoc.AnnotationProcessor.processRequestMappingMethod(AnnotationProcessor.java:233)
at org.versly.rest.wsdoc.AnnotationProcessor.processElements(AnnotationProcessor.java:126)
at org.versly.rest.wsdoc.AnnotationProcessor.process(AnnotationProcessor.java:87)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
... 26 more
、私はこれが明確例であると思います。
生の種類は使用しないでください。 ValidationRequestはジェネリック型です。したがって、validationRequestは、ValidationRequestタイプではなく、ValidationRequestでなければなりません。また、HashMapではなく、Map:Mapにプログラムする必要があります。最後に、例外について尋ねるときは、常に例外の完全なスタックトレースと関連するコードを投稿します。 –
DTOでDTOが消費された場所でその変更を行っても問題は解決されませんでした。 OPにスタックトレースを追加しました。 – mrmannione
あなたのコメントが何を意味するか分かりません。私が知っているのは、あなたが投稿したコードはコンパイルされず、私が提案した変更を適用していないということだけです。さて、少なくとも、私たちはビルド時に問題が発生していることを知っています。これはあなたのタグに追加する必要があるversly(これについては何も分かりません)によって引き起こされます。 –