2017-07-04 20 views
0

ジェネリックパラメータを持つ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 

、私はこれが明確例であると思います。

+1

生の種類は使用しないでください。 ValidationRequestはジェネリック型です。したがって、validationRequestは、ValidationRequestタイプではなく、ValidationRequest でなければなりません。また、HashMapではなく、Map:Mapにプログラムする必要があります。最後に、例外について尋ねるときは、常に例外の完全なスタックトレースと関連するコードを投稿します。 –

+0

DTOでDTOが消費された場所でその変更を行っても問題は解決されませんでした。 OPにスタックトレースを追加しました。 – mrmannione

+0

あなたのコメントが何を意味するか分かりません。私が知っているのは、あなたが投稿したコードはコンパイルされず、私が提案した変更を適用していないということだけです。さて、少なくとも、私たちはビルド時に問題が発生していることを知っています。これはあなたのタグに追加する必要があるversly(これについては何も分かりません)によって引き起こされます。 –

答えて

0

Minimal, Complete, and Verifiable exampleのユニットテストで投稿してください。あなたのコードはいくつかの理由に、私には意味がありません:

  1. あなたのコードはコンパイルされません - あなたは、コンストラクタのように見えるがないクラスValidationRequest内部のいくつかの未知のタイプInfluxValidationRequestをしました。
  2. type erasureというものがあるので、Map<String, Double>は実行時に生のMapに過ぎません。
  3. Doubleの値、Integerの値などを検証する方法を知っているバリデータのインスタンスが異なるのはなぜですか?いわゆる検証コードはどこにありますか?
+0

申し訳ありませんが、InfluxValidationRequestをValidationRequest、typoに変更しました。私はMap内のジェネリック型のDTOを使ってこれを行うことを望んでいました。これははるかに大きなサービスの一部であり、コンパイルするのに十分に投稿することは難しいでしょう。 – mrmannione

+0

@mrmannione「私はこれをやりたいと思っていた」 - これは何ですか? POJO以外に、何をしようとしているのかというご質問はあまりありません。より小さな例を再現する時間がかからない場合は、最小限のコードを見て助けてくれるとは思えません。 –