问题:
如图数据库存的varchar类型,r如何是返回的结果没有双引号?
控制器
@RequestMapping("/query")
public List<HashMap<String, Object>> query() {
return service.list();
}
Service层
public List<HashMap<String, Object>> list() {
sqlSession = MybatisUtil.getSqlSession();
MyMapper mapper = sqlSession.getMapper(MyMapper.class);
return mapper.getList();
}
Mapper
@Select("select * from tmp")
List<HashMap<String, Object>> getList();
更新解决办法:
@RequestMapping("/convertString")
public List<HashMap<String, Object>> convertString() {
String row = "[[110.201664,20.011946],[110.26742,19.892085],[110.237594,19.747553],[110.209732,19.935714]]";
HashMap<String, Object> map = new HashMap<>();
List<HashMap<String, Object>> list = new ArrayList<>();
map .put("stream", parse(row));
Gson gson = new Gson();
List res = gson.fromJson(row, List.class);
map .put("gson", res);
list.add(map);
return list;
}
public static double[][] parse(String rowStr) {
double[] items = Arrays.stream(rowStr.split("[\\[\\],\\s]+"))
.filter(s -> !s.isEmpty())
.mapToDouble(Double::parseDouble)
.toArray();
return IntStream.range(0, items.length / 2)
.mapToObj(i -> new double[] { items[i + i], items[i + i + 1] })
.toArray(double[][]::new);
}
库里存的应该就是一个字符串,使用数据库工具查看数据的时候是不需要加双引号显示的。但是取出来的若干行数据,转成 JSON 之后,str 中是保存的数据库取出来内容,也就是图左边看到的字符串。显然这个字符串本身也是 JSON 数据格式,所以这里有两种处理方法:
double[][]
,再序列化成 JSON 给前端两种方式都行,关键是要跟前端协商好。当然如果后端需要使用坐标数据,那就必须在后端来处理了。
后端用 JSON 反序列化工具处理最简单。不过对于这种简单的格式,手工处理也未尝不可。不过每次写 Stream 的程序总是想吐槽 —— 真难用
如果拿 Kotlin 来写要轻松得多