java前后端分離使用注解優(yōu)雅的返回實體部分屬性

#第一個注解

為召陵等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及召陵網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計、成都做網(wǎng)站、召陵網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

/**

* @Description:

* @Author: ckk

* @CreateDate: 2019/9/17 17:15

*/

@Target({ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

public @interface JSONS {

JSONField[] value();

}

#第二個注解

import java.lang.annotation.*;

/**

* @Description:

* @Author: ckk

* @CreateDate: 2019/9/17 17:16

*/

@Target({ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

@Repeatable(JSONS.class)

public @interface JSONField {

Class type();

String[] include() default {""};

String[] filter() default {""};

}

#解析器

import com.fasterxml.jackson.annotation.JsonFilter;

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.databind.SerializerProvider;

import com.fasterxml.jackson.databind.ser.BeanPropertyFilter;

import com.fasterxml.jackson.databind.ser.FilterProvider;

import com.fasterxml.jackson.databind.ser.PropertyFilter;

import com.fasterxml.jackson.databind.ser.PropertyWriter;

import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;

import java.util.*;

/**

* @Description:

* @Author: ckk

* @CreateDate: 2019/9/17 17:19

*/

@JsonFilter("JacksonFilter")

public class JacksonJsonFilter extends FilterProvider {

Map, Set> includeMap = new HashMap();

Map, Set> filterMap = new HashMap();

public JacksonJsonFilter() {

}

public void include(Class type, String[] fields) {

this.addToMap(this.includeMap, type, fields);

}

public void filter(Class type, String[] fields) {

this.addToMap(this.filterMap, type, fields);

}

private void addToMap(Map, Set> map, Class type, String[] fields) {

Set fieldSet = (Set) map.getOrDefault(type, new HashSet());

fieldSet.addAll(Arrays.asList(fields));

map.put(type, fieldSet);

}

public BeanPropertyFilter findFilter(Object filterId) {

throw new UnsupportedOperationException("Access to deprecated filters not supported");

}

public PropertyFilter findPropertyFilter(Object filterId, Object valueToFilter) {

return new SimpleBeanPropertyFilter() {

public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider prov, PropertyWriter writer) throws Exception {

if (JacksonJsonFilter.this.apply(pojo.getClass(), writer.getName())) {

writer.serializeAsField(pojo, jgen, prov);

} else if (!jgen.canOmitFields()) {

writer.serializeAsOmittedField(pojo, jgen, prov);

}

}

};

}

public boolean apply(Class type, String name) {

Set includeFields = (Set) this.includeMap.get(type);

Set filterFields = (Set) this.filterMap.get(type);

if (includeFields != null && includeFields.contains(name)) {

return true;

} else if (filterFields != null && !filterFields.contains(name)) {

return true;

} else {

return includeFields == null && filterFields == null;

}

}

}

序列化器

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.apache.commons.lang3.StringUtils;

/**

* @Description:

* @Author: ckk

* @CreateDate: 2019/9/17 17:18

*/無錫做人流手術(shù)多少錢 http://www.ytsg029.com/

public class CustomerJsonSerializer {

ObjectMapper mapper = new ObjectMapper();

JacksonJsonFilter jacksonFilter = new JacksonJsonFilter();

public CustomerJsonSerializer() {

}

public void filter(Class clazz, String[] include, String[] filter) {

if (clazz != null) {

if (include.length > 1 || include.length == 1 && org.apache.commons.lang3.StringUtils.isNotBlank(include[0])) {

this.jacksonFilter.include(clazz, include);

}

if (filter.length > 1 || filter.length == 1 && StringUtils.isNotBlank(filter[0])) {

this.jacksonFilter.filter(clazz, filter);

}

this.mapper.addMixIn(clazz, this.jacksonFilter.getClass());

}

}

public String toJson(Object object) throws JsonProcessingException {

this.mapper.setFilterProvider(this.jacksonFilter);

return this.mapper.writeValueAsString(object);

}

public void filter(JSONField json) {

this.filter(json.type(), json.include(), json.filter());

}

}

#使用方法

@ApiOperation(value = “查詢詳情”, response = ZcPolicyVo.class)

@GetMapping(“getById/{id}”)

@JSONS({@JSONField(type = ZcPolicyVo.class, filter = {“base_id”, “pic”, “mobilecontent”,

“synchtime”, “url”, “policy_originid”, “base_updatetime”, “tags”, “audittime”, “creator”}),

@JSONField(type = SysAreaVo.class, include = {“base_id”, “base_name”}),

@JSONField(type = SysCodeVo.class, include = {“base_id”, “base_name”}),

@JSONField(type = ZcRelationVo.class, include = {“keyId”, “keyIdName”}),

@JSONField(type = ImUsersVo.class, include = {“userid”, “username”}),

@JSONField(type = ZcCentraldeptcodeVo.class, include = {“codeId”, “codeIdName”}),

@JSONField(type = ZcLocaldeptcodeVo.class, include = {“codeId”, “codeIdName”}),

@JSONField(type = PolicyKeywordsVo.class, include = {“keyId”, “keyIdName”}),

@JSONField(type = PolicyMapKeywordsVo.class, include = {“keyId”, “keyIdName”}),

@JSONField(type = ZcKeywordVo.class, include = {“baseId”, “title”})

})

public Message getById(@PathVariable(“id”) String id) {

try {

ZcPolicy zcPolicy = zcPolicyJpaService.getObjectByPK(id);

return Message.success(BeanutilsCopy.convertBean(zcPolicy, ZcPolicyVo.class));

} catch (Exception e) {

logger.error("查詢詳情異常:===》 " + e);

return Message.exception(e.getMessage());

}

}

#filter:排除某些屬性

#include :包括某些屬性

當前題目:java前后端分離使用注解優(yōu)雅的返回實體部分屬性
文章地址:http://bm7419.com/article48/gipshp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、營銷型網(wǎng)站建設(shè)網(wǎng)站制作、建站公司、網(wǎng)站設(shè)計App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化