java - Spring data mongodb 序列化 InetSocketAddress

标签 java mongodb spring-data

首先:我对 Spring 非常陌生,因此,如果我未能提供该问题所需的所有信息,我很抱歉。我的问题如下:我有以下类,我想将哪些对象保存在 mongoDB 中

public class Subscription implements Serializable {

    private String type;
    private InetSocketAddress host;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public InetSocketAddress getHost() {
        return host;
    }

    public void setHost(InetSocketAddress host) {
        this.host = host;
    }


    public Subscription(){}

我通过定义一个存储库接口(interface)并将其 Autowiring 到我的应用程序中(这对于另一个存储库来说效果很好)来做到这一点

public interface SubscriptionRepository extends MongoRepository<Subscription, String> {
}

我可以将订阅对象保存到存储库中,但将它们读入 List<Subscription>通过SubscriptionRepository.findall()给我一个错误

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.net.InetSocketAddress]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.net.InetSocketAddress.<init>()

查看数据库,InetSocketAddress 对象的保存有点奇怪

{ "_id" : ObjectId("5e1a48f4a6e30c7d2089e5cd"), "type" : "test", "host" : { "holder" : { "addr" : { "holder" : { "address" : 174417169, "family" : 1 }, "_class" : "java.net.Inet4Address" }, "port" : 0 } }, "_class" : "com.example.myproject.Subscription" }

为了以某种方式保存 InetSocketAddress 字段,以便我可以从数据库正确检索订阅对象,我必须更改什么?

提前谢谢您

最佳答案

InetSocketAddress 是字符串主机名或带有 int 端口的 InetAddress。

InetAddress 基本上是一个字节数组。

InetSocketAddress 和 InetAddress 都不能用作 java beans。

不存储 InetSocketAddress,而是存储 String、byte[] 和端口。更好的是,将 byte[] 转换为 IP 地址的字符串表示形式,并仅存储字符串和端口,该字符串可以是主机名,也可以是字符串形式的 IP 地址。然后添加一个在需要时构造 InetSocketAddress 的方法。还为端口和字符串主机/地址添加 setter 和 getter。

public class Subscription implements Serializable {

    private String type;

    // instead of InetSocketAddress
    private String host;
    private int port;

    public InetSocketAddress getSocketAddress() {
            return new InetSocketAddress(host, port);
    }

    // setters and getters

关于java - Spring data mongodb 序列化 InetSocketAddress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59699441/

相关文章:

java - 检查 JTextField 是否为空时出现 NumberFormatException 错误

java - 如何通过 JPA 从连接的第二个表中检索特定行

hibernate - Spring PagingAndSortingRepository - 按名称查找

java - 作为变量的 native 查询

java - 替换类型数据结构的数组列表中的值

java - android 媒体播放器 url 未找到

mongodb - 如何在 MongoDB 中使用数组位置 $ 和聚合投影

mongodb - MapReduce、MongoDB 和 node-mongodb-native

c# - BSON 文档到 FilterDefinition<Bson> MongoDb c# 驱动程序

java - Spring Data Neo4J 存储库 findAll() 导致 nullpointerexception