gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:48:59 24 4
gpt4 key购买 nike

我有一个像下面这样的类(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/

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