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

问题描述 投票:0回答:1

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

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

示例:

这是我要序列化的DTO类

public class MyDTO {

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

这是我的两个Web服务方法:

@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": "[email protected]" }

并调用/ example2产生]相同的DTO,但没有emailsessionId

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

我该怎么做?

我如何才能做到这一点,而不必实际使用2个不同的DTO进行响应?那有可能吗?像@JsonIgnoreProperty这样的注释将不起作用,因为它将永久忽略属性。

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

java json spring jackson dto
1个回答
0
投票

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

有关更多详细信息,可在stackoverflow上检查此question

© www.soinside.com 2019 - 2024. All rights reserved.