1

Springのデータ・レストとSpringのElasticsearchでエラーが発生しました。Spring Data Elasticsearch:java.lang.ClassCastException:java.lang.Stringにキャストすることができないjava.lang.String

  • のpom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
        <modelVersion>4.0.0</modelVersion> 
    
        <groupId>test</groupId> 
        <artifactId>spring.elasticsearch</artifactId> 
        <version>0.0.1-SNAPSHOT</version> 
        <packaging>war</packaging> 
    
        <name>Template per webapp</name> 
        <url>http://localhost:8181</url> 
    
        <properties> 
         <spring.boot.version>1.4.0.RELEASE</spring.boot.version> 
         <com.h2database.version>1.4.192</com.h2database.version> 
         <com.sun.jna.version>3.0.9</com.sun.jna.version>   
        </properties> 
    
        <dependencies> 
         <dependency> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot</artifactId> 
          <version>${spring.boot.version}</version> 
         </dependency> 
         <dependency> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-starter</artifactId> 
          <version>${spring.boot.version}</version> 
         </dependency> 
         <dependency> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-starter-web</artifactId> 
          <version>${spring.boot.version}</version> 
         </dependency> 
         <dependency> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-starter-data-rest</artifactId> 
          <version>${spring.boot.version}</version> 
         </dependency> 
         <dependency> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-starter-data-jpa</artifactId> 
          <version>${spring.boot.version}</version> 
         </dependency> 
         <dependency> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 
          <version>${spring.boot.version}</version> 
         </dependency> 
         <dependency> 
          <groupId>com.h2database</groupId> 
          <artifactId>h2</artifactId> 
          <version>${com.h2database.version}</version> 
         </dependency> 
         <dependency> 
          <groupId>com.sun.jna</groupId> 
          <artifactId>jna</artifactId> 
          <version>${com.sun.jna.version}</version> 
         </dependency> 
    
         <dependency> 
          <groupId>com.fasterxml.jackson.dataformat</groupId> 
          <artifactId>jackson-dataformat-smile</artifactId> 
          <version>2.8.1</version> 
         </dependency> 
    
         <dependency> 
          <groupId>junit</groupId> 
          <artifactId>junit</artifactId> 
          <version>3.8.1</version> 
          <scope>test</scope> 
         </dependency> 
        </dependencies> 
    
        <build> 
         <plugins> 
          <plugin> 
           <groupId>org.apache.maven.plugins</groupId> 
           <artifactId>maven-compiler-plugin</artifactId> 
           <version>3.0</version> 
           <configuration> 
            <source>1.8</source> 
            <target>1.8</target> 
           </configuration> 
          </plugin> 
          <plugin> 
           <groupId>org.apache.maven.plugins</groupId> 
           <artifactId>maven-eclipse-plugin</artifactId> 
           <version>2.7</version> 
           <configuration> 
            <downloadSources>true</downloadSources> 
            <downloadJavadocs>false</downloadJavadocs> 
            <wtpversion>2.0</wtpversion> 
            <additionalBuildcommands> 
             <buildCommand> 
              <name>org.springframework.ide.eclipse.core.springbuilder</name> 
             </buildCommand> 
            </additionalBuildcommands> 
            <additionalProjectnatures> 
             <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
            </additionalProjectnatures> 
           </configuration> 
          </plugin> 
         </plugins> 
        </build> 
    </project> 
    
  • 春ブートアプリケーション

    @SpringBootApplication 
    public class Application { 
    
        public static void main(String[] args) { 
         SpringApplication.run(Application.class, args); 
        } 
    
    } 
    
  • Java構成

    これらは私の単純なプロジェクトの構成要素であります210

    @Configuration 
    @EnableJpaRepositories 
    @EnableElasticsearchRepositories 
    public class ElasticSearchConfig { 
    
    } 
    
  • スプリングデータエンティティ

    @Entity 
    @Document(indexName = "computerindex") 
    public class Computer { 
    
        @Id 
        @GeneratedValue(strategy = GenerationType.AUTO) 
        private long id; 
        @Field private String name; 
        @Field private String brand; 
    
        /** getters and setters **/ 
    
    } 
    
  • リポジトリ

    @RepositoryRestResource(exported=true) 
    public interface ComputerRepository extends ElasticsearchRepository<Computer, String>{ 
    
    } 
    

アプリケーションがエラーなしで成功始まります。

これは、自動生成されたインデックスの構造である:私はへのHTTP POSTを作成しようとした場合

{ 
    "_links" : { 
    "computers" : { 
     "href" : "http://localhost:8080/computers{?page,size,sort}", 
     "templated" : true 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/profile" 
    } 
    } 
} 

:私はURL​​に行くとき

data 
    elasticsearch 
     nodes 
      0 
       _state 
       indices 
        computerindex 
         _state 
         0 
          _state 
          index 
          translog 
         1 
         2 
         3 
         4 
       node.lock 

私はこの予想される応答を持っていますURL http://localhost:8080/computerscontent-type "application/json"と入力します。この入力は次のとおりです。

{ 
    "name" : "pc", 
    "brand" : "brand" 
} 
私はそれが longタイプを持つ唯一のフィールドなので誤差は、 @Idフィールドが含まれているとし

2016-08-04 09:34:41.245 ERROR 6884 --- [nio-8080-exec-3] o.s.d.r.w.RepositoryRestExceptionHandler : java.lang.Long cannot be cast to java.lang.String 

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String 
    at org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository.stringIdRepresentation(SimpleElasticsearchRepository.java:28) ~[spring-data-elasticsearch-2.0.2.RELEASE.jar:na] 
    at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.createIndexQuery(AbstractElasticsearchRepository.java:255) ~[spring-data-elasticsearch-2.0.2.RELEASE.jar:na] 
    at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.save(AbstractElasticsearchRepository.java:142) ~[spring-data-elasticsearch-2.0.2.RELEASE.jar:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_65] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_65] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65] 
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65] 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:503) ~[spring-data-commons-1.12.2.RELEASE.jar:na] 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:488) ~[spring-data-commons-1.12.2.RELEASE.jar:na] 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460) ~[spring-data-commons-1.12.2.RELEASE.jar:na] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) ~[spring-data-commons-1.12.2.RELEASE.jar:na] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) ~[spring-aop-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at com.sun.proxy.$Proxy92.save(Unknown Source) ~[na:na] 
    at org.springframework.data.repository.support.CrudRepositoryInvoker.invokeSave(CrudRepositoryInvoker.java:100) ~[spring-data-commons-1.12.2.RELEASE.jar:na] 
    at org.springframework.data.rest.core.support.UnwrappingRepositoryInvokerFactory$UnwrappingRepositoryInvoker.invokeSave(UnwrappingRepositoryInvokerFactory.java:222) ~[spring-data-rest-core-2.5.2.RELEASE.jar:na] 
    at org.springframework.data.rest.webmvc.RepositoryEntityController.createAndReturn(RepositoryEntityController.java:501) ~[spring-data-rest-webmvc-2.5.2.RELEASE.jar:na] 
    at org.springframework.data.rest.webmvc.RepositoryEntityController.postCollectionResource(RepositoryEntityController.java:275) ~[spring-data-rest-webmvc-2.5.2.RELEASE.jar:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_65] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_65] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65] 
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65] 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) [spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_65] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_65] 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.4.jar:8.5.4] 
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65] 

:0

私はこのエラーを持っています。

このエラーの原因は何ですか?それを解決するにはどうしたらいいですか?

ありがとうございました。

UPDATE

私はそれはバグでできることを排除するものではありません。

これはAbstracElasticsearchRepositoryで「stringIdRepresentation」メソッドの宣言です:

protected abstract String stringIdRepresentation(ID id); 

そして、これはクラスSimpleElasticsearchRepositoryでの実装です。この実装では

@Override 
protected String stringIdRepresentation(String id) { 
    return id; 
} 

、クラスがとして文字列を期待し以前は何の変換もしていません。

答えて

1

私は部分的に、このように、String idlong idを置き換える解決した:

@Id 
@GeneratedValue(generator="system-uuid") 
@GenericGenerator(name="system-uuid", strategy = "uuid") 
private String id; 

を例外が@Idフィールドの種類によって正確に引き起こされました。

文字列を@Idとして使用すると、エラーは発生しません。

関連する問題