[英]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
包和“真實”域名?
如果您根本不想在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.