两种办法:
1、在你的实体里面增加相应的转换为String的方法,每个方法根据实际返回字段手动拼装json字符串;
2、使用json插件,向fastjson、gson等lib,这些插件都提供了序列化指定属性的方法和不序列化指定属性的方法。
例如:fastjson提供了注解JSONField注解,可以通过配置serialize=false来排除对应的字段,但是在你说的情况中显然不能使用这样的方法,只能使用过滤器的方式:
使用方式:
JSON.toJSONString(map, new SerializePropertyFilter(true,"id", "createTime","updateTime","delFlag"));
过滤器:
public class SerializePropertyFilter implements PropertyPreFilter{
private String[] props;
private boolean ignore;
@Override
public final boolean apply(JSONSerializer serializer, Object object, String name) {
return filterProps(name)&&filter(object, name);
}
private boolean filterProps(String name){
if(props!=null){
for(String prop : props){
if(name.equals(prop)){
return !ignore;
}
}
if(!ignore){
return false;
}
}
return true;
}
protected boolean filter(Object value, String key){
return true;
}
public SerializePropertyFilter(){
}
public SerializePropertyFilter(boolean ignore,String... props) {
this.props = props;
this.ignore = ignore;
}
}