当前位置: 首页 > 知识库问答 >
问题:

Spring data Cassandra Rest Id必须可分配给Serializable!:null

勾向文
2023-03-14

给定以下实体和存储库,当我访问存储库的rest资源时,ID必须可分配给Serializable!:null错误。

curl -H 'Accept: application/json' http://localhost:8080/properties
{"cause":null,"message":"Id must be assignable to Serializable!: null"}

Groovy代码

@Component
interface PropertyRepository extends CassandraRepository<Property, String> {
}

@Table("property_v1")
@Canonical
class Property {
    @PrimaryKeyColumn(value = "name", type = PARTITIONED)
    String name
    @PrimaryKeyColumn(value = "environment", type = CLUSTERED)
    String environment
    @Column("value")
    String value
}

我尝试向主键字段添加@id注释,但spring不允许在同一实体上添加@id和@primarykeycolumn注释。

我得到@表类型不能同时定义@id和@primarykeycolumn属性错误。

@RepositoryRestResource(path = "/properties", collectionResourceRel = "properties")
java.lang.IllegalArgumentException: Id must be assignable to Serializable!: null
        at org.springframework.util.Assert.instanceCheckFailed(Assert.java:637)
        at org.springframework.util.Assert.isInstanceOf(Assert.java:537)
        at org.springframework.data.rest.webmvc.support.RepositoryEntityLinks.linkToSingleResource(RepositoryEntityLinks.java:135)
        at org.springframework.data.rest.core.support.DefaultSelfLinkProvider.createSelfLinkFor(DefaultSelfLinkProvider.java:68)
        at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.getSelfLinkFor(PersistentEntityResourceAssembler.java:99)
        at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.wrap(PersistentEntityResourceAssembler.java:76)
        at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.toResource(PersistentEntityResourceAssembler.java:55)
        at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.entitiesToResources(AbstractRepositoryRestController.java:110)
        at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.toResources(AbstractRepositoryRestController.java:80)
        at org.springframework.data.rest.webmvc.RepositoryEntityController.getCollectionResource(RepositoryEntityController.java:209)
        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.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)

共有1个答案

夏侯瑞
2023-03-14

解决了这个问题。
如果一个实体类有一个复合键,那么spring data rest只有当我有一个专用的主键列类时才能工作。
将类结构更改为下面,为spring data实体启用rest资源。我为Key使用了一个嵌套静态类。但它很可能是自己的公开课。

我觉得这个锅炉板应该从开发人员那里移除,相反,spring可以查看分区键列并将其用作ID。

@Component
interface PropertyRepository extends CassandraRepository<Property, Property.PropertyKey> {
}

@Table("property_v1")
@Canonical
class Property {
    @PrimaryKey
    PropertyKey key
    @Column("value")
    String value

    @PrimaryKeyClass
    @Canonical
    static class PropertyKey implements Serializable {
        @PrimaryKeyColumn(value = "name", type = PARTITIONED)
        String name
        @PrimaryKeyColumn(value = "environment", type = CLUSTERED)
        String environment
    }
}
 类似资料:
  • 问题内容: 如果我制作了一个不实现Serializable的Composite-id类,例如: 发生错误,例如: hibernate实体类不必是可序列化的。那么,为什么Composite- id类必须实现Serializable?我读了这个主题,但是没有给我足够的信息。 问题答案: 会话对象需要可序列化,因此它引用的所有对象也必须可序列化。id用作索引会话中已加载对象的键。如果是Composite

  • 我在django rest auth中使用自定义寄存器序列化程序来添加注册时的新字段。 我在用户模型中有一个国家/地区模型和一个国家/地区字段,它是国家/地区的FK。 user.models user.serializers 自定义寄存器序列化器 以国家/地区为对象从客户端发送的示例数据 {用户名:“伯尼”,电子邮件:bernie@d.com,国家:{…},密码1:“密码”,密码2:“密码”} 但

  • 我一直在尝试创建一个django项目,该项目拥有用户,并且这些用户可以添加他们创建的书籍的标题。但每次我输入书名(不在管理页面上)时,我都会出现这个错误 models.py

  • 问题内容: 将我的war文件部署到tomcat时出现错误: 我四处搜寻,发现log4j.xml的顺序可能是错误的,但应该是正确的。 有什么建议么? 问题答案: 根据错误消息,DTD期望所有元素都在该元素之前。您选择的方式错误。

  • 问题内容: state.charAt(i)部分在标题中指出了问题。如果我的方法不是完全错误的,该如何解决该问题。 问题答案: 之所以不起作用,是因为它是类的方法-即它是一个函数,并且您无法在Java中为函数赋值。 如果您想逐个字符地遍历一个字符串,我可能会这样做: 然后改为对GuessAsChar进行操作。根据您的需要,可能有更好的方法(如更整洁的方法)来搜索字符串中的字符对等。

  • 我在运行django代码时遇到以下错误。我是一个绝对的初学者,我遵循一个教程来创建一个crud应用程序。 在我的html表单中键入信息时,我得到以下错误 ValueError:无法分配django。contrib。auth。模型。0x00000288775D3EF0处的匿名用户对象:“Note.user”必须是“user”实例 从。派克 views.py forms.py 创造html