java - 如何根据参数从 REST 中的 DTO 中排除属性

标签 java json jackson jax-rs msf4j

我有一个像下面这样的类(class)。

    public class MyDto {

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

我有一个如下所示的 MS4J 服务,并从此对象返回 JSON。

import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import org.example.service.dto.MyDto;
import org.wso2.msf4j.Request;

    @Path("/hello/1.[\\d]/version")
    public class HelloService {

        @GET
        @Path("/{version}")
        @Produces({"application/json"})
        public Response hello(@PathParam("version") int version, @Context Request request) {
            MyDto dtoObject = new MyDto(1, "TestObjName", "TestObjAddress");
            if (version < 1) {
                //return object without address
            } else {
                //return object with address
            }
        }
    }

在运行时,我需要根据版本从java类中排除属性。 IE。 if version >1 没有地址的对象,否则具有地址属性的对象。

不能将地址字段设置为 null。我尝试使用 JacksonView 和 JacksonFilter 执行此操作,但无法将其适合此场景。

有什么想法或示例代码可以解决这个问题吗?

最佳答案

您可以使用适当的注释创建 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 属性必须在基类中受到保护才能成功。

关于java - 如何根据参数从 REST 中的 DTO 中排除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43178365/

相关文章:

java - Mybatis参数类有bug报告吗?

json - 有没有一种直接的方法可以将存储在 HDFS 中的数据转换为 JSON?

python - 将 JSON 对象排序到层次结构中

java - jackson 数据绑定(bind)

java - 使用 Jackson 将标签添加到 JSON

java - 从 .java 文件获取 JSON 数据

java - war 之间的共享库

java - 泛型:单个实例的?、对象和原始类型之间有什么区别?

asp.net - 如何从 json 数组(或字符串)中获取元素?

java - Jackson Object Mapper 读取值(以字节为单位)返回一个所有字段都初始化为 null 的对象