未映射Map <string,string =“”>

时间:2019-02-22 10:42:03

标签: javascript java

前端将此json发送到我的API

{  
  "parameters":{  
      "MAIL_BODY":"saffsa",
      "MAIL_FROM":"sffasafs",
      "MAIL_RECEIVED_DATE":"asfasf",
      "MAIL_SUBJECT":"asfafs",
      "MAIL_TO":"ssfafs"
   },
   "templateID":"9093",
   "deliveryChannel":"NONE"
}

控制器:

 @RequestMapping(value = "/previewDocument", method = RequestMethod.POST, produces = "application/pdf")
public byte[] previewDocument(@RequestBody Map<String, String> parameters, @RequestBody String templateID, @RequestBody String deliveryChannel) {
    // TODO
}

但是我在后端日志中得到了这个

  

2019-02-22 10:34:55.068警告9976 --- [nio-8083-exec-7]   .w.s.m.s.DefaultHandlerExceptionResolver:已解决   [org.springframework.http.converter.HttpMessageNotReadableException:   JSON解析错误:无法反序列化java.lang.String的实例   超出START_OBJECT令牌;嵌套异常为   com.fasterxml.jackson.databind.exc.MismatchedInputException:无法   从START_OBJECT令牌中反序列化java.lang.String的实例   在[来源:(PushbackInputStream);行:1,列:15](通过   参考链:java.util.LinkedHashMap [“ parameters”])]

我不明白这是什么问题。 parameters似乎是地图,对吗?有人可以解释一下为什么这行不通吗?

1 个答案:

答案 0 :(得分:1)

Map<String, String>替换为Map<String, Object>,解析将成功。 内部对象被解析为Map<String, String>
您将需要在方法主体中强制转换/询问值的类型,例如

if (parameters.get("parameters") instanceof Map) {
  Map<String, String> parametersMap = (Map<String, String>)parameters.get("parameters");
  String body = parametersMap.get("MAIL_BODY");
}