2017-04-03 63 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