前端将此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
似乎是地图,对吗?有人可以解释一下为什么这行不通吗?
答案 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");
}