在采用springMvc+Mybatis的架构中。数据库已经建好,数据库和需要返回的实体共用一个model。一切都井然有序,看起来很美好。
返回的代码都如下这样
@RequestMapping("/doxx.do")
@ResponseBody
public doxxx(String param){
Map<String,Object> resultMap=new HashMap();
....
ModelA model=modelService.doJob(param);
resultMap.put("data",model);
return resultMap;
} class Model{ private String nameA; private Date nameB; ...
}
这时候,客户端同学突然对我这个后台说:“亲,这个model我们想复用另一个工程里面现有的,内容都是一样的,就是一些变量名要改,timestamp要变成yyyy-MM-dd的字符串。请给我们返回这样的格式哟~”。
呦你妹啦,由于controller 是直接把model放到requestMap里面的,难道要我重新拼一个对象,把数据都转换一遍,这代码就太丑了。那我从头改数据库和model,全部改一遍?这也太麻烦了,时间也不一定允许,这不是坑爹么!
然而事实证明,我果然是too young too simple。问了同事之后发现,这样的情况其实很好解决,只要简单的加个注解,做一点点修改,就可以完成。所以在这里记录一下,强调一下自己的无知,把自己钉在历史的耻辱柱上,没事就回来看看~
1.对于变量名的变化
@JsonProperty("name_A")
private String nameA;
这样就可以把原本返回的nameA变成name_A。而在代码内部,则仍是按照nameA来使用,简单整洁
2.对于变量类型的变化
稍微麻烦一点,但是仍很简便
@JsonSerialize(using = CustomDateSerializer.class)
private Date updateTime; /********另一个文件*********************/
public class CustomDateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
if (value != null) {
gen.writeString(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value));
}
}
}
通过自定义的序列化方法,可以有很高*度的更改返回的数据内容。上面的就是把date变为 yyyy-MM-dd HH:mm:ss 返回
3.对于model中不想返回的变量
这个就很简单啦
@JsonIgnore
private Date createTime;
加上JsonIgnore就不会返回啦。
虽说都不是什么难理解的高深技术,但是这些小技巧对于工作中提高效率真的很有帮助,多学多看,多写多问。
好久没写博客了,以后还是要抽空来写,多多学习~