4

我有一个像下面这样的课程。

    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 object without address else object with the address property。

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

任何想法或示例代码来解决这个问题?

4

1 回答 1

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在基类中才能成功。

于 2017-04-03T08:05:26.667 回答