gpt4 book ai didi

java - Spring Framework 和 Apache CXF 中的自定义 JSON 序列化

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

在我的 Spring Framework 项目中,我正在编写 Web 服务 (Apache CXF),其中使用 JacksonJsonProvider 序列化输入和输出。

我想每次都以不同的方式序列化 DTO 对象。我知道我可以使用自定义序列化程序并覆盖 Jackson 的一些功能,但我的要求是我每次都想以不同的方式进行操作!

示例:

这是我想要序列化的 DTO 类

public class MyDTO {

private Long sessionId;
private String firstName;
private String lastName;
private String email;
...
}

这是我的两个网络服务方法:

@GET
@Path("/example1")
public Response myWsMethodExample1(...) {
MyDTO dto = new MyDto();
...
return Response.status(Status.OK).entity(dto).type(MediaType.APPLICATION_JSON).build();
}

@GET
@Path("/example2")
public Response myWsMethodExample2(...) {
MyDTO dto = new MyDto();
...
return Response.status(Status.OK).entity(dto).type(MediaType.APPLICATION_JSON).build();
}

我希望对 /example1 的 API 调用产生:

{ "sessionId": 1, "fistName": "John", "lastName": "Smith", "email": "john@smith.com" }

并调用/example2 生成相同的 DTO,但不包含 emailsessionId :

{ "fistName": "John", "lastName": "Smith" }

我该怎么做?

如何实现这一目标,而无需实际使用 2 个不同的 DTO 进行响应?这可能吗?像 @JsonIgnoreProperty 这样的注释将不起作用,因为这会永久忽略属性。

我正在寻找最优雅的解决方案。非常感谢:-)

最佳答案

使用@JsonView根据序列化上下文过滤字段。当向 REST 客户端返回数据时,根据调用的 REST 服务,我们需要限制使用相同数据模型时将序列化哪些数据。

更多详情可以查看这个question在堆栈溢出

还有一篇关于 @JsonView 和 Spring 安全集成的好文章 baeldung.com基于安全性过滤暴露数据

关于java - Spring Framework 和 Apache CXF 中的自定义 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59733182/

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