RestTemplate传递form表单数据转换LinkedMultiValueMap问题

项目中使用Ribbon传递form表单数据遇到一个数据转换问题:
使用fastJson转换LinkedMultiValueMap时报错

String jsonString = "{\"ownerId\":\"186\",\"ownerRole\":\"AGENT\",\"settleCardId\":null,\"group\":\"PAY\"," +
            "\"organization\":null}";
LinkedMultiValueMap params = JSON.parseObject(jsonString, LinkedMultiValueMap.class);
System.out.println(params);

错误信息:

Exception in thread "main" com.alibaba.fastjson.JSONException: java.lang.String cannot be cast to java.util.List
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:630)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:348)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:252)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:471)
at com.yp.ribbonconsume.TestMain.main(TestMain.java:47)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.List
at org.springframework.util.LinkedMultiValueMap.put(LinkedMultiValueMap.java:38)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:447)
at com.alibaba.fastjson.parser.deserializer.MapDeserializer.deserialze(MapDeserializer.java:64)
at com.alibaba.fastjson.parser.deserializer.MapDeserializer.deserialze(MapDeserializer.java:41)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:626)
... 4 more

原因是因为LinkedMultiValueMap的value是List<V>类型,赶时间写了一个比较笨的方法

String jsonString = "{\"ownerId\":\"186\",\"ownerRole\":\"AGENT\",\"settleCardId\":null,\"group\":\"PAY\"," +
            "\"organization\":null}";
JSONObject object = JSONObject.parseObject(jsonString);
Iterator it = object.keySet().iterator();
StringBuilder sb = new StringBuilder("{");
while (it.hasNext()) {
    String key = (String) it.next();
    Object value = object.getString(key);
    if (value == null) {
        sb.append(JSON.toJSONString(key)).append(":").append(value).append(",");
    } else {
        List<String> list = Collections.singletonList(value.toString());
        sb.append(JSON.toJSONString(key)).append(":").append(JSON.toJSONString(list)).append(",");
    }
}
sb.append("}");
sb.deleteCharAt(sb.length()-2);
System.out.println(sb.toString());
LinkedMultiValueMap params = JSON.parseObject(sb.toString(), LinkedMultiValueMap.class);
System.out.println(params);

如果各位有好的方法,烦请告之,不慎感激!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 今天想要讲的东西比较杂乱,自己理了好久的思路感觉一直找不到一条线串联起这些碎片化的知识。然后就想着那就先写写看吧,...
    Programmer客栈阅读 2,086评论 0 9
  • React中没有类似Angular那样的双向数据绑定,在做一些表单复杂的后台类页面时,监听、赋值、传递、校验时编码...
    tedyuen777阅读 9,901评论 1 23
  • HTML表单 在HTML中,表单是 ... 之间元素的集合,它们允许访问者输入文本、选择选项、操作对象等等,然后将...
    兰山小亭阅读 3,443评论 2 14
  • 在这里书写的目的是想让自己焦躁的内心更清晰,而不受那种人云亦云的蛊惑,不偏激不焦躁不激烈甚至负能量,能真正心态平和...
    奇非其阅读 166评论 0 0