在SO上有很多關於Spring @RestController
不是返回JSON對象而是一個字符串。許多這些問題涉及RestController
上的不當註釋。我讀過它們並試圖在適當的時候將解決方案應用於我的其餘控制器,但我仍然向我的JavaSript AJAX處理程序返回一個字符串。這次與其他SO帖子關於此問題的帖子有所不同的是,我的其他控制器正在接收文件上傳並返回休息響應。我的休息控制器看起來像下面。從Spring休息控制器返回一個字符串而不是JSON對象
@RestController
@RequestMapping(value="/api/admin")
public class AdminImport {
@AutoWired
private SystemService systemService;
@RequestMapping(value="/import", method=RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Map<String, Object> importData(@RequestParam("file") MultipartFile file, HttpServletRequest req, HttpServletResponse resp) throws IOException {
Boolean success = false;
try {
if(!file.isEmpty()) {
systemService.importData(file.getInputStream());
success = true;
}
} catch(Exception e) { }
Map<String, Object> map = new HashMap<>();
map.put("success",success);
return map;
}
}
我目前的解決辦法是在返回的String解析成使用JSON.Parse
JSON對象。
myapi.upload = function(data, callBack) {
var options = {
url : "api/admin/import",
data : data,
processData : false,
type : "POST",
contentType : false,
mimeType : "multipart/form-data",
success : function(r) { callBack(JSON.Parse(r)); }
error : function(r) { callBack({"success":false, "msg":"Unknown error"}); }
}
$.ajax(options);
}
關於我在做什麼的錯誤?這個字符串是否迴應了特定於上傳文件的內容?
我在一個不同的控制器中有非常相似的邏輯,但它接受一個@RequestBody
而不是接受文件上傳,而AJAX回調實際上接收一個JSON對象(而不是一個字符串)。或者這是關於客戶端代碼的東西嗎?
任何幫助表示讚賞。
json的定義是一個字符串...它是一個javascript數組或對象的字符串表示形式。如果你正在返回一個非json字符串,爲什麼你在成功回調中將它解析爲json?拋出什麼錯誤?檢查瀏覽器開發工具網絡中的實際請求以檢查狀態,發送響應主體數據等以獲得更多線索 – charlietfl