当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring RestController返回FileSystemResource或json?

柳才良
2023-03-14
@RequestMapping(value = "/zipDownload", produces="application/zip", method = RequestMethod.GET)
public FileSystemResource getZip(@RequestParam(value="filePath", required=true) String filePath ) throws FileExtensionException{
    return file.getZipFile(filePath);
}

和服务:

public FileSystemResource getZipFile(String fileName) throws FileExtensionException {
    String ext=FilenameUtils.getExtension(fileName);
    if (!ext.equals("zip"))
        throw new FileExtensionException(ext + " and not zip");
    return new FileSystemResource(new File(fileName));
}

例外情况

public class FileExtensionException extends Exception {

    private static final long serialVersionUID = 1L;

    public FileExtensionException(String message){
        super("The selected file has a different extension:" + message);
    }
}

和异常控制器

@ControllerAdvice 
public class ErrorController {

    /**
     * 
     * @param e: exception thrown
     * @return ErroreResponse
     */
     @ExceptionHandler(value = Exception.class)
    public @ResponseBody ErrorResponse errorHandler(Exception e){   
        //Make the exception by buildErrorResponse
        return ErrorResponseBuilder.buildErrorResponse(e);
    }
}

如何才能在相同的方法中返回Zip文件或json消息?问题是,produces=“application/zip”,如果不这样做,就会收到正确的错误json,但它不会下载文件,否则反之亦然,谢谢

共有1个答案

孔飞舟
2023-03-14

编辑

您可以保持控制器中的getzip不变,只需通过以下方式更改@exceptionhandler:

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public @ResponseBody ErrorResponse errorHandler(Exception e, HttpServletRequest request) {
    request.setAttribute(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, Collections.singleton(MediaType.APPLICATION_JSON));
    return ErrorResponseBuilder.buildErrorResponse(e);
}

在这里,我只需修改请求并重置producible_media_types_attribute参数,以明确告诉Spring我要使用什么表示形式。

 类似资料:
  • 例如 原因: 我想我必须禁用gson解析到POJO中,但不知道如何做到这一点。

  • 我有一个函数,当某些条件不满足时,它应该不返回任何内容(void)或字符串。 我也试过这句话。左(无效)

  • 问题内容: 我不知道如何用代码返回JSON数据。 JS C#的Default.aspx.cs 提前致谢! 问题答案: 你不远 您需要执行以下操作: 您可以进一步减少此代码,但为清晰起见,我将其保留下来。实际上,您甚至可以这样写: 这将返回一个json字符串。我宁愿更加明确,因为我使用自定义转换器。也有Json.net,但是框架的工作开箱即可。

  • 问题内容: 我正在使用Bottle编写一个API ,到目前为止,一切都很棒。但是,在尝试返回JSON数组时遇到了一个小障碍。这是我的测试应用程序代码: 当我运行它并请求每条路线时,我会从前两条路线得到我期望的JSON响应: /单 / containsarray 因此,我曾期望返回一个字典列表来创建以下JSON响应: 但是,请求路线只会导致错误。我在做什么错,如何以这种方式返回JSON数组? 问题答

  • 问题内容: 我正在构建一个客户端脚本繁重的ASP.NET MVC应用程序,它将使用JSON和jQuery来操作DOM。 我的理解是 Web API Controller 和 MVC Controller 都可以返回JSON。 在我的情况下,应该使用 Web API控制器 还是 MVC控制器 ? 问题答案: 可以在任何ASP.NET应用程序中创建并托管Web API控制器,而不仅仅是MVC应用程序。

  • 根据我的场景,我应该使用Web API控制器还是MVC控制器?