Springboot端点返回File

时间:2016-05-13 12:51:11

标签: java spring-boot spring-boot-actuator

我正在写一个自定义的Springboot Actuator Endpoint,我想返回一个文件。但是,除了JSON字符串之外,我找不到返回任何其他内容的方法。

我的终点是:

import java.io.File;
import java.net.URI;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.stereotype.Component;

@Component
public class MyEndPoint implements Endpoint<URI> {

   @Override
   public String getId() {
       return "custoendpoint";
   }

   @Override
   public boolean isEnabled() {
       return true;
   }

   @Override
   public boolean isSensitive() {
       return false;
   }

   @Override
   public URI invoke() {
       File f = new File("C:/temp/cars.csv");
       return f.toURI();    
   }
}

当我访问localhost:8080 / custoendpoint时,我收到了我的文件路径...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您应该实施Endpoint,而不是实施MvcEndpoint。然后,您可以访问HttpServletResponse,您可以将文件的内容复制到该import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import org.springframework.boot.actuate.endpoint.Endpoint; import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint; import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; class CustomEndpoint implements MvcEndpoint { @Override public String getPath() { return "/custom"; } @Override public boolean isSensitive() { return false; } @Override public Class<? extends Endpoint<?>> getEndpointType() { return null; } @RequestMapping(method = RequestMethod.GET) public void invoke(HttpServletResponse response) throws ServletException, IOException { FileCopyUtils.copy(new FileInputStream(new File("c:/temp/cars.csv")), response.getOutputStream()); } } 。例如:

@{
   var admin = @ViewData["Admin"].ToString();
}
@if (admin == "True") {  //Show Grid }