gpt4 book ai didi

java - Spring data mongodb 序列化 InetSocketAddress

转载 作者:行者123 更新时间:2023-12-02 09:07:27 26 4
gpt4 key购买 nike

首先:我对 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com