JsonProperties对模型返回的应用

在采用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就不会返回啦。

虽说都不是什么难理解的高深技术,但是这些小技巧对于工作中提高效率真的很有帮助,多学多看,多写多问。

好久没写博客了,以后还是要抽空来写,多多学习~

原文地址:https://www.cnblogs.com/mamuluke/p/5702040.html