【问题标题】:How to exclude properties from DTO in REST based on parameter如何根据参数从 REST 中的 DTO 中排除属性
【发布时间】:2017-08-27 22:47:49
【问题描述】:

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

    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 执行此操作,但无法使其适应这种情况。

有解决此问题的想法或示例代码吗?

【问题讨论】:

    标签: java json jackson jax-rs msf4j


    【解决方案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 才能成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-05
      • 2013-05-26
      • 1970-01-01
      • 2013-04-09
      • 2021-12-21
      • 1970-01-01
      • 2015-11-29
      • 2017-11-23
      相关资源
      最近更新 更多