JAVA - 使用相同的 POJO 但字段较少(没有杰克逊)
JAVA - Using same POJO but with less fields (without jackson)
我有一个由现有端点使用的 POJO,此端点使用 POJO 中存在的所有字段进行响应。
但是我正在创建一个新的 enpoint,它应该只响应同一个 POJO 的某些字段。
我想避免复制相同的 POJO 文件并删除我不需要的参数,有没有办法做到这一点?
这是 POJO:
public class AgentChatStatus {
private UUID activeChat;
private List<AgentChat> chatRequests; //Object with less params on new endpoint
private List<AgentChat> chatsOnHold; //Object with less params on new endpoint
private Collection<Agent> agents;
private int totalChatRequests;
private int totalChatsOnHold;
private Preferences.AgentConsoleConfig config;
// ...
}
public class AgentChat implements Payload {
private UUID id;
private String queueId;
假设我只需要在端点 2 中显示“Id”,而在端点 1 中显示 id 和 queueId。
我和 spring 一起工作。
谢谢!
有了 Jackson,您可以利用 JSON 观看次数。首先是创建如下视图:
public class Views {
public static class ViewEndpoint2 { // The name can be whatever you want
}
public static class ViewEndpoint1 extends ViewEndpoint2 {
}
}
然后您需要使用 @JsonView
注释您的 POJO 中的属性,以便您告诉 Jackson 这些属性应该在哪些视图中可见:
public class AgentChatStatus {
@JsonView(Views.ViewEndpoint2.class)
private UUID activeChat;
@JsonView(Views.ViewEndpoint2.class)
private List<AgentChat> chatRequests;
@JsonView(Views.ViewEndpoint2.class)
private List<AgentChat> chatsOnHold;
@JsonView(Views.ViewEndpoint2.class)
private Collection<Agent> agents;
@JsonView(Views.ViewEndpoint2.class)
private int totalChatRequests;
@JsonView(Views.ViewEndpoint2.class)
private int totalChatsOnHold;
@JsonView(Views.ViewEndpoint2.class)
private Preferences.AgentConsoleConfig config;
}
public class AgentChat implements Payload {
@JsonView(Views.ViewEndpoint2.class)
private UUID id;
@JsonView(Views.ViewEndpoint1.class)
private String queueId;
}
最后,您需要用相应的视图注释端点:
@JsonView(Views.ViewEndpoint1.class)
@RequestMapping("your-old-enpoint")
public void yourOldEndpoint() {
(...)
}
@JsonView(Views.ViewEndpoint2.class)
@RequestMapping("your-new-enpoint")
public void yourNewEndpoint() {
(...)
}
@JsonView(Views.ViewEndpoint1.class)
基本上表示 AgentChatStatus
和 AgentChat
中的所有属性,而 @JsonView(Views.ViewEndpoint2.class)
仅表示其中的一些属性(用 @JsonView(Views.ViewEndpoint2.class)
注释的属性)。
您可以在 https://www.baeldung.com/jackson-json-view-annotation 阅读更多相关信息。
我有一个由现有端点使用的 POJO,此端点使用 POJO 中存在的所有字段进行响应。
但是我正在创建一个新的 enpoint,它应该只响应同一个 POJO 的某些字段。
我想避免复制相同的 POJO 文件并删除我不需要的参数,有没有办法做到这一点?
这是 POJO:
public class AgentChatStatus {
private UUID activeChat;
private List<AgentChat> chatRequests; //Object with less params on new endpoint
private List<AgentChat> chatsOnHold; //Object with less params on new endpoint
private Collection<Agent> agents;
private int totalChatRequests;
private int totalChatsOnHold;
private Preferences.AgentConsoleConfig config;
// ...
}
public class AgentChat implements Payload {
private UUID id;
private String queueId;
假设我只需要在端点 2 中显示“Id”,而在端点 1 中显示 id 和 queueId。 我和 spring 一起工作。 谢谢!
有了 Jackson,您可以利用 JSON 观看次数。首先是创建如下视图:
public class Views {
public static class ViewEndpoint2 { // The name can be whatever you want
}
public static class ViewEndpoint1 extends ViewEndpoint2 {
}
}
然后您需要使用 @JsonView
注释您的 POJO 中的属性,以便您告诉 Jackson 这些属性应该在哪些视图中可见:
public class AgentChatStatus {
@JsonView(Views.ViewEndpoint2.class)
private UUID activeChat;
@JsonView(Views.ViewEndpoint2.class)
private List<AgentChat> chatRequests;
@JsonView(Views.ViewEndpoint2.class)
private List<AgentChat> chatsOnHold;
@JsonView(Views.ViewEndpoint2.class)
private Collection<Agent> agents;
@JsonView(Views.ViewEndpoint2.class)
private int totalChatRequests;
@JsonView(Views.ViewEndpoint2.class)
private int totalChatsOnHold;
@JsonView(Views.ViewEndpoint2.class)
private Preferences.AgentConsoleConfig config;
}
public class AgentChat implements Payload {
@JsonView(Views.ViewEndpoint2.class)
private UUID id;
@JsonView(Views.ViewEndpoint1.class)
private String queueId;
}
最后,您需要用相应的视图注释端点:
@JsonView(Views.ViewEndpoint1.class)
@RequestMapping("your-old-enpoint")
public void yourOldEndpoint() {
(...)
}
@JsonView(Views.ViewEndpoint2.class)
@RequestMapping("your-new-enpoint")
public void yourNewEndpoint() {
(...)
}
@JsonView(Views.ViewEndpoint1.class)
基本上表示 AgentChatStatus
和 AgentChat
中的所有属性,而 @JsonView(Views.ViewEndpoint2.class)
仅表示其中的一些属性(用 @JsonView(Views.ViewEndpoint2.class)
注释的属性)。
您可以在 https://www.baeldung.com/jackson-json-view-annotation 阅读更多相关信息。