HTTP请求结果的不同编码,具体取决于Accept标头

时间:2014-10-31 08:19:43

标签: spring spring-mvc dojo

我有一个控制器,它有一个上传文件的方法,在客户端使用dojo Uploader类,它支持除IE以外的所有浏览器的ajax上传,并上传带有IFrame的IE。 结果是一个JSON对象,但是当使用IFrame机制时,JSON必须包含在< textarea>中:

@RequestMapping(value = "/documentation/{appId:.+}/", method = RequestMethod.POST)
@ResponseBody
public String uploadDocumentation(HttpServletRequest request,
        @PathVariable String appId, @RequestParam("uploadedfile") MultipartFile file)
        throws Exception {
    // ....
    String json = JsonUtils.jsonify(map);
    if (accepts(request, "application/json")) {
                return json;
    } else if (accepts(request, "text/html")) {
        return "<textarea>" + json + "</textarea>";
    } else {
        throw new GinaException("Type de retour non supporté");
    }

我想知道是否有办法在框架中注册这种编码机制,这样我们就必须返回一个对象,然后让框架完成剩下的工作。

提前致谢。

1 个答案:

答案 0 :(得分:0)

为了记录,我只是添加了第二种方法:

@RequestMapping(value = "/documentation/{appId:.+}/", method = RequestMethod.POST,
        produces="application/json")
@ResponseBody    
public UploadResult uploadDocumentation(@PathVariable String appId,
         @RequestParam("uploadedfile") MultipartFile file) throws Exception {
    ...
    return new UploadResult(filename);
}

@RequestMapping(value = "/documentation/{appId:.+}/", method = RequestMethod.POST,
        produces="text/html")
@ResponseBody    
public String uploadDocumentationIE(@PathVariable String appId,
        @RequestParam("uploadedfile") MultipartFile file) throws Exception {
    UploadResult obj = uploadDocumentation(appId, file);
    String json = JsonUtils.jsonify(obj);
    return "<textarea>" + json + "</textarea>";
}