2017-04-03 58 views
1

从REST中的DTO中排除属性我有一个像下面这样的类。如何根据参数

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类中排除属性。即。如果版本> 1的对象不带地址,则使用地址属性的对象。

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

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

回答

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