2015-08-24 124 views
0

在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对象(而不是一个字符串)。或者这是关于客户端代码的东西吗?

任何帮助表示赞赏。

+0

json的定义是一个字符串...它是一个javascript数组或对象的字符串表示形式。如果你正在返回一个非json字符串,为什么你在成功回调中将它解析为json?抛出什么错误?检查浏览器开发工具网络中的实际请求以检查状态,发送响应主体数据等以获得更多线索 – charlietfl

回答

1

尝试明确地将.ajax选项对象中的dataType选项设置为包含双引号的“json”。

+0

是的,这是客户端方面的事情,因为设置dataType:“json”使它工作。这从来就不是服务器端代码,imo。因为我正在查看我如何处理其他AJAX调用,并且始终设置dataType:“json”(该选项只是未针对该上传代码设置)。 –

+0

如果你在这里阅读关于dataType(http://api.jquery.com/jQuery.ajax/)的内容,你会发现它试图做出明智的猜测。 Spring可能会响应MIME类型的文本标题,所以JQuery对响应不做任何处理。我没有使用Spring MVC几个月,但是您可以通过查看http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc- ANN-httpentity –

相关问题