当前位置: 首页 > news >正文

天津专业网站建设公司南宁关键词优化公司

天津专业网站建设公司,南宁关键词优化公司,广州中新知识城开发建设网站,北京网站建设公司兴田德润电话我有个朋友在公司遇到一个需求:某个接口,面向不同的用户返回的字段数不一样字段数。 我举例两种场景并且都给一个方案他,同时也供大家参考。 场景1: 接口返回的是List 或者直接就是entity,且entity对应某张数据表&…

我有个朋友在公司遇到一个需求:某个接口,面向不同的用户返回的字段数不一样字段数。
我举例两种场景并且都给一个方案他,同时也供大家参考。

  1. 场景1:
    接口返回的是List 或者直接就是entity,且entity对应某张数据表,不需要考虑嵌套有其他实体的情况。
public class A{private Long id;private String name;}

假设在写这个核心方法前我们从数据库或者某个地方已经得到这个用户要展示的字段,即一个列表

List<String> fields 

这种情况下直接把实体转Map类型,根据fields,取对应的key,value,这种可以写个AOP拦截来轻松实现全局配置。

    public static Object getLastMap(Object v, List<String> fields) {ObjectMapper objectMapper = new ObjectMapper();Map<String, Object> map = objectMapper.convertValue(v, new TypeReference<Map<String, Object>>() {});Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, Object> entry = iterator.next();if (fields.contains(entry.getKey())) continue;iterator.remove(); // 删除不是 "x" 和 "y" 的键值对}return map;}
  1. 场景2:
    接口返回的是List 或者直接就是entity,要考虑嵌套有其他实体的情况。
public class A{private Long id;private B b;private String name;private String x;}public class B{private Long id;}

假设在写这个核心方法前我们从数据库或者某个地方已经得到这个用户要展示的字段,即一个字典
key对应是全部实体的名称,value对应这些实体的变量名称列表。

Map<String, List<String>> fieldsDictionary;

转换核心:

@JsonSerialize(using = CustomSerializer.class)public static class CustomSerializer extends JsonSerializer<TBdMaterialVo> {private Map<String, List<String>> fieldsDictionary;public CustomSerializer(Map<String, List<String>> fieldsDictionary) {this.fieldsDictionary = fieldsDictionary;}@Overridepublic void serialize(A value, JsonGenerator gen, SerializerProvider serializers) throws IOException {// 本人比较懒,这里直接用fieldsDictionary的key来用,大家自行修改gen.writeStartObject();if (fieldsDictionary.containsKey("b")) {// 直接调用 serializeMaterialL 来处理 materialL 的序列化gen.writeObjectField("b", value.getMaterialL());serializeMaterialL(value.getMaterialL(), gen, fieldsDictionary.get("b"));}if (fieldsDictionary.containsKey("id")) {gen.writeObjectField("id", value.getFmaterialid());}gen.writeEndObject();}private void serializeMaterialL(B value, JsonGenerator gen, List<String> fields) throws IOException {if (fields.contains("id")) {gen.writeObjectField("id", value.getFmaterialid());}}}

使用:

        A vo = new A();vo.setId(1L);vo.setName("xx");B b= new B();b.setId(11L);vo.setMaterialL(b);Map<String, List<String>> fieldsDictionary = new HashMap<>();fieldsDictionary.put("b", Arrays.asList("id"));fieldsDictionary.put("id", Arrays.asList("x"));fieldsDictionary.put("name", Arrays.asList("x"));ObjectMapper mapper = new ObjectMapper();SimpleModule module = new SimpleModule();module.addSerializer(A.class, new A.CustomSerializer(fieldsDictionary));mapper.registerModule(module);String jsonResult = mapper.writeValueAsString(vo);return success(JSON.parseObject(jsonResult, Map.class));

结束语:很久都不写博客了,如果有帮助点点赞,点赞多那么给大家分享其他的小妙招。

http://www.15wanjia.com/news/28510.html

相关文章:

  • 网站做qq链接seo网络培训学校
  • excel可以做网站吗广东百度seo关键词排名
  • 荔湾网站建设公司沧州网站推广优化
  • 怎么在子域名建立一个不同的网站热搜榜排名前十
  • 站长统计 网站统计重庆网站建设维护
  • 微信官方网站培训机构网站
  • 做网站可以临摹吗seo营销培训咨询
  • 济南精品建站外包公司价格网店推广方案范文
  • seo 优化教程正规seo关键词排名哪家专业
  • 谷歌做公司网站需要多少钱灰色词网站seo
  • 网络科技公司网站制作免费的网站推广平台
  • 网站免费推广怎么做网站建设流程
  • 莆田企业自助建站西安seo关键词推广
  • 中企动力建站怎么样北京网站快速优化排名
  • 网络最好的运营商seo关键词排名优化系统
  • 企业建站系统信息免费发布友链
  • 上海专做特卖的网站2345网址大全下载到桌面
  • 淄博那里有做网站的上海最近三天的新闻
  • 国内大中型网站建设知名公司怎么投放广告
  • 成都企业网站建站百度秒收录
  • 做自媒体挣钱的网站有哪些网页怎么做出来的
  • 广州安全教育平台登录入口官网长春做网络优化的公司
  • 全国建设网站外链怎么发
  • 什么叫网站建设四网合一百度做网站推广的费用
  • 怎么做网站差不多站长搜狗seo快速排名公司
  • 在pc端网站基础上做移动端模板建站难吗
  • 佛山微网站建设 天博必应搜索
  • 做网站主机几个配件天津百度网络推广
  • 做网站东莞选哪家公司好最佳bt磁力猫
  • 查征信怎么查 个人免费查询seo核心技术排名