簡體   English   中英

如何在spring-data-rest中防止relTargetType的json輸出?

[英]How to prevent json output of relTargetType in spring-data-rest?

我正在創建一個@RepositoryRestResource並將其導出為rest服務,如下所示:

@RepositoryRestResource(collectionResourceRel = "myContent", path = "myContent")
public interface MyContentRepository extends PagingAndSortingRepository<MyContentEntity, Long> {

}

問題:當我請求內容時,我得到以下摘錄:

  "content" : [ {
    "value" : [ ],
    "rel" : null,
    "collectionValue" : true,
    "relTargetType" : "com.domain.MyContentEntity"
  } ],

問題:如何防止暴露relTargetType包和“真實”域名?

在您的POJO中:

如果您根本不想在JSON中使用relTargetType:

@JsonIgnore
public String getRelTargetType() {
    return relTargetType;
}

如果您只想隱藏包裹:

public String getRelTargetType() {
    return relTargetType.split("\\.")[2];
}

如果要隱藏包並返回其他域名:

public String getRelTargetType() {
    return "AlteredDomainName";
}

我不熟悉Spring Rest Data,但據我所知,它使用Jackson進行JSON處理。

如果確實如此,我建議您的情況要求使用Mix-in注釋 ,這些注釋用於控制無法修改的類的序列化。

首先使用JsonIgnoreType注釋集創建一個簡單的混合類。

@JsonIgnoreType
public class OmitType {}

接下來,在使用的ObjectMapper實例中注冊混合。 據我所知,您可以按照以下說明在Spring Rest Data中訪問它:

要將自己的Jackson配置添加到Spring Data REST使用的ObjectMapper中,請覆蓋configureJacksonObjectMapper方法。 該方法將傳遞給ObjectMapper [...]

configureJacksonObjectMapper方法中,使用不需要的類型注冊混合,如下所示:

objectmapper.addMixIn(RelTargetType.class, OmitType.class);

請注意, RelTargetType.class只是猜測。 更改為字段實際包含的任何類型。 這應該使Jackson在遇到它時忽略該特定類型的字段。

添加:

萬一relTargetType現場MyContentEntity實際上只是一個字符串字段,將混入可以改變,而不是以下內容:

public abstract class OmitType {
    @JsonIgnore
    public abstract String getRelTargetType();
}

注冊它應該改為:

objectmapper.addMixIn(MyContentEntity.class, OmitType.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM