如何基于参数从REST中排除DTO中的属性

时间:2017-04-03 07:00:20

标签: java json jackson jax-rs msf4j

我有一个类似下面的课程。

let fiterServices = services.filter({$0.serviceName.lowercased().range(of: self.searchController.searchBar.text!.lowercased()) != nil})

我有一个像下面这样的MS4J服务,从这个对象返回一个JSON。

    public class MyDto {

    private int id;
    private String name;
    private String address;
    // getters and setters .....
    }

在运行时,我需要根据版本从java类中排除属性。即。如果版本> 1对象没有地址else对象带有地址属性。

为地址字段设置null不是一个选项。我尝试用JacksonView和JacksonFilter做到这一点但却无法适应这种情况。

要解决此问题的任何想法或示例代码?

1 个答案:

答案 0 :(得分:1)

您可以使用正确的注释创建MyDto的子类以忽略该属性:

public class OldVersionDto extends MyDto
{
    @JsonIgnore
    protected String address;

    public OldVersionDto(int id, String name, String address) {
        super(id, name, address);
    }
}

它甚至可以是服务的内部类,如果它仅用于特定目的(只需确保它是静态的)。现在根据参数

实例化局部变量
        MyDto dtoObject;
        if (version < 1) {
            dtoObject = new MyDto(1, "TestObjName", "TestObjAddress");
        } else {
            dtoObject = new OldVersionDto(1, "TestObjName", "TestObjAddress");
        }

当然,address属性必须在基类顺序中为protected才能成功。