Java接口返回json如何忽略特定属性_第1页
Java接口返回json如何忽略特定属性_第2页
Java接口返回json如何忽略特定属性_第3页
Java接口返回json如何忽略特定属性_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Java接口返回json如何忽略特定属性目录经常遇到的问题不完美的解决方案通过SimplePropertyPreFilter方式(Json返回)场景一:只保留name和sex字段场景二:过滤掉email和phone字段@ResponseBody返回json如何忽略特定属性通过反射Map解决不同接口参数使用相同对象展示不同参数

经常遇到的问题

在实际得开发过程中,我们经常会遇到以下场景,我们后端请求某个接口后获取到得数据,不希望将所有字段都返回给前端,那么我们需要封装,或者过滤一些不必要得字段后返回给前端。

不完美的解决方案

使用Jackson字段动态过滤

@JsonIgnore用于忽略序列化和反序列化中使用的逻辑属性。@JsonIgnore可用于setter、getter或字段。

@JsonIgnoreProperties忽略JSON序列化和反序列化中的指定逻辑属性。它在类级别进行了注释。

@JsonIgnoreType在类级别进行了注释,它忽略了整个类。

@JsonInclude(JsonInclude.Include.NON_NULL)属性为NULL不序列化,即不返回给前端

以上方式都不满足实际要求,需要序列化的Property,并非固定的。这次我要id,name,下次我可能要name,score。

通过SimplePropertyPreFilter方式(Json返回)

这种写法,接口返回类型就要求是Json字符串类型。无法满足Spring注解@ResponseBody。

场景一:只保留name和sex字段

publicstaticvoidmain(String[]args){

JSONObjectjsonObject=newJSONObject();

jsonObject.put("name","jhon");

jsonObject.put("age",18);

jsonObject.put("sex","男");

jsonObject.put("phone","1111111");

jsonObject.put("email","142");

System.out.println(jsonObject);

//SimplePropertyPreFilterfilter=newSimplePropertyPreFilter("name","sex");

SimplePropertyPreFilterfilter=newSimplePropertyPreFilter();

filter.getIncludes().add("name");

filter.getIncludes().add("sex");

System.out.println(JSONObject.toJSONString(jsonObject,filter));

//或者调用以下方式

publicstaticStringobject2Json(Objectobject,String...keys){

SimplePropertyPreFilterfilter=newSimplePropertyPreFilter(object.getClass(),keys);

returnJSONObject.toJSONString(object,filter,SerializerFeature.WriteMapNullValue);

场景二:过滤掉email和phone字段

publicstaticvoidmain(String[]args){

JSONObjectjsonObject=newJSONObject();

jsonObject.put("name","jhon");

jsonObject.put("age",18);

jsonObject.put("sex","男");

jsonObject.put("phone","1111111");

jsonObject.put("email","142");

System.out.println(jsonObject);

SimplePropertyPreFilterfilter=newSimplePropertyPreFilter();

filter.getExcludes().add("email");

filter.getExcludes().add("phone");

System.out.println(JSONObject.toJSONString(jsonObject,filter));

}

@ResponseBody返回json如何忽略特定属性

@RequestBody注解标记接收前端传递给后端的json数据,然后转成对象。

@ResponseBody注解标记是把后端返回的对象转换成json数据,然后传递给前端。

我们想要的效果是将查询得到的List对象动态过滤指定的字段

但实际上我们得到的对象还会再封装一层:returnnewIResult(list);

使用AOP,通过自定义注解的方式来控制动态过滤指定字段。(实现太麻烦放弃了)

通过反射Map解决

通过反射获取到该类和所要获取的字段get方法,保存在一个map中。但当数据量大的情况再把对象转换一次map,就会影响接口性能了。(此方式不可取)

最终解决办法:定义查询列表数据的接口,用Map来承载,而不是bean。

publicListMapString,Objectlist(Entityentity);

不同接口参数使用相同对象展示不同参数

当我们在写接口的时候,一个实体类对象会被多个接口使用,但每个接口要求的参数可能都不一样。为了接口参数规范,于是我们就重写了多个实体类,对应不同的接口。(相信很多人目前是偷懒每套业务都只用了一个实体类对象吧,前端自己挑选所需要的字段)

但是提供给第三方的接口,参数和结果字段必须都要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论