在我的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,但没有email
和sessionId
:
{ "fistName": "John", "lastName": "Smith" }
我该怎么做?
我如何才能做到这一点,而不必实际使用2个不同的DTO进行响应?那有可能吗?像@JsonIgnoreProperty这样的注释将不起作用,因为它将永久忽略属性。
我正在寻找最优雅的解决方案。非常感谢:-)
根据序列化的上下文,使用@JsonView过滤字段。在将数据返回到REST客户端时,根据调用哪个REST服务,我们需要限制在使用相同数据模型时要序列化哪些数据。
有关更多详细信息,可在stackoverflow上检查此question