ssm,控制器返回的json没有实体类时,如何对json格式化?下有详细 10C

dao方法调用mybatis里面的select方法,返回的直接是一个List封装的对象,没有使用resultMap,也没有实体类
现在在控制器返回json给前台时,需要把这个json中的id从Long型变成String型,把毫秒(timestamp)变成日期

我想写一个converter之类的东西,可以在传json给前台的时候自动把这个id变成String型
如下
图片说明

然后这个也在配置文件中配置了
图片说明

但是问题是。。。我究竟怎么去用它呢?
图片说明
伪代码,请无视错误,我想在这个控制器方法中,使用这个converter,把这个控制器返回的json中的Long型的id变成String返回,究竟应该怎么做呢?又应该怎么去调用我刚刚配置的converter呢?

希望大家不吝赐教!!

6个回答

你的ID应该不是varchar类型把,日期你可以在使用sql函数格式化啊

m0_37676512
龙猫12138 id在数据库里面是bigint
一年多之前 回复

无实体类的处理json的方式,常用的是org.json.JSONObject和com.alibaba.fastjson.JSONObject,
com.alibaba.fastjson.JSONObject jsonPara = com.alibaba.fastjson.JSONObject.parseObject(json串);
然后就可以操作了

JSONObject obj = JSONObject.fromObject("你的字符串");
obj.put("id",convert(obj.get("id")));
obj.put("time",SimpleDataFormate.....(obj.get("time")))

如果你使用FastJSON序列化的话
FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fjc = new FastJsonConfig();
//1、序列化重点
fjc.setSerializerFeatures(SerializerFeature.BrowserCompatible);
fastJsonConverter.setFastJsonConfig(fjc);
converters.add(fastJsonConverter);

重写一个VO 的Bean啊,copy下再把这个id赋值

u011049527
dcasfasf 回复m0_37676512: 你可以抽象继承啊
一年多之前 回复
m0_37676512
龙猫12138 现在就是不能写那么多的bean,如果每一个查询都写会有几十个没什么意义的bean
一年多之前 回复

List list = dao.findById(page,rows);
for(Object object : l ist){
Map map = (Map)object;
//包含 id 字段
if(map.containsKey("id")){
Long id = map.get("id");
map.put("id",String.valueOf(id));
}
//包含时间戳
if(map.containsKey("timestamp")){
String timestamp = map.get("timestamp");
//转换成时间类型 在放回去 转换时间 可以用 SimpleDateFormat
map.put("timestamp",convertToDate(timestamp))
}
}

最后 可以把 list 转成 json 也可以不转 你这块用的 springMVC 有@ResponseBody 这个注解 应该会自动帮你转换

json 转换工具 可以用 谷歌的 gson

public static String BeanToJsonStr(Object object) {
    String str = "";
    Gson gson = new Gson();
    str = gson.toJson(object);
    return str;
}

public static <T> T jsonStrToBean(String jsonStr, Class<T> clazz) {
    JsonObject obj = new JsonParser().parse(jsonStr).getAsJsonObject();
    T t = new Gson().fromJson(obj, clazz);
    return t;
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!