相关疑难解决方法(0)

Spring Resttemplate异常处理

以下是代码段; 基本上,当错误代码不是200时,我试图传播异常.

ResponseEntity<Object> response = restTemplate.exchange(url.toString().replace("{version}", version),
                    HttpMethod.POST, entity, Object.class);
            if(response.getStatusCode().value()!= 200){
                logger.debug("Encountered Error while Calling API");
                throw new ApplicationException();
            }
Run Code Online (Sandbox Code Playgroud)

但是,如果来自服务器的500响应,我将获得异常

org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94) ~[spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
Run Code Online (Sandbox Code Playgroud)

我真的需要在try中包装其余的模板交换方法吗?那么代码的目的是什么?

rest spring exception-handling resttemplate

88
推荐指数
8
解决办法
13万
查看次数

使用RestTemplate请求将Multipart File作为POST参数发送

我正在使用Spring 3和RestTemplate.我基本上有两个应用程序,其中一个必须将值发布到另一个应用程序.通过休息模板.

当要发布的值是字符串时,它的工作完美,但是当我必须发布混合和复杂的参数(如MultipartFiles)时,我会得到转换器异常.

例如,我有这个:

App1 - PostController:

@RequestMapping(method = RequestMethod.POST)
public String processSubmit(@ModelAttribute UploadDTO pUploadDTO, 
        BindingResult pResult) throws URISyntaxException, IOException {
    URI uri = new URI("http://localhost:8080/app2/file/receiver");

    MultiValueMap<String, Object> mvm = new LinkedMultiValueMap<String, Object>();
    mvm.add("param1", "TestParameter");
    mvm.add("file", pUploadDTO.getFile()); // MultipartFile

    Map result = restTemplate.postForObject(uri, mvm, Map.class);
    return "redirect:postupload";
}
Run Code Online (Sandbox Code Playgroud)

另一方面......我有另一个Web应用程序(App2)从App1接收参数.

App2 - ReceiverController

@RequestMapping(value = "/receiver", method = { RequestMethod.POST })
public String processUploadFile(
        @RequestParam(value = "param1") String param1,
        @RequestParam(value = "file") MultipartFile file) {

    if (file == null) {
        System.out.println("Shit!... …
Run Code Online (Sandbox Code Playgroud)

multipartform-data spring-mvc resttemplate

38
推荐指数
6
解决办法
11万
查看次数

如何使用RestTemplate转发大文件?

我有一个Web服务调用,通过它可以上传zip文件.然后将文件转发到另一个服务进行存储,解压缩等.现在文件存储在文件系统中,然后构建FileSystemResource.

Resource zipFile = new FileSystemResource(tempFile.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

我可以使用ByteStreamResource以节省时间(在转发之前不需要在磁盘上保存文件)但是为此我需要构建一个字节数组.如果是大文件,我将收到"OutOfMemory:java heap space"错误.

ByteArrayResource r = new ByteArrayResource(inputStream.getBytes());
Run Code Online (Sandbox Code Playgroud)

任何使用RestTemplate转发文件而不会出现OutOfMemory错误的解决方案?

java groovy spring resttemplate

36
推荐指数
3
解决办法
3万
查看次数

使用RestTemplate POST InputStream

我有一个客户端需要将大量的大型json文件POST到服务器.我已经能够通过将每个文件读入内存并使用RestTemplate发布整个文件来实现它.但是,客户端快速耗尽处理大型json文件的内存.我想切换到流式方法,但无法弄清楚如何正确使用RestInmplate的FileInputStream.我发现了这个问题,并使用了接受的答案中给出的代码,但我仍然看到内存使用和OutOfMemory异常使我相信它不是流式传输文件,但仍然完全将它们读入内存.我究竟做错了什么?这是我目前的情况:

final InputStream fis = ApplicationStore.class.getResourceAsStream(path);

final RequestCallback requestCallback = new RequestCallback() {
    @Override
    public void doWithRequest(final ClientHttpRequest request) throws IOException {
        request.getHeaders().add("Content-type", "application/json");
        IOUtils.copy(fis, request.getBody());
    }
};

final RestTemplate restTemplate = new RestTemplate();
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setBufferRequestBody(false);     
restTemplate.setRequestFactory(requestFactory);     
final HttpMessageConverterExtractor<String> responseExtractor =
         new HttpMessageConverterExtractor<String>(String.class, restTemplate.getMessageConverters());

restTemplate.execute("http://" + host + ":8080/upads-data-fabric" + "/ruleset", httpMethod, requestCallback, responseExtractor);
Run Code Online (Sandbox Code Playgroud)

java resttemplate

15
推荐指数
2
解决办法
7945
查看次数

MultipartFile + String作为请求参数在Spring中使用RestTemplate

在我的Spring启动应用程序中,我需要将String值与MultipartFile一起传递为Requestparam. 控制器位于我将MultipartFile转换为的地方java.io.File,然后在帮助下将其传递给DAO控制器restTemplate.

从角请求将先打上传控制器然后UploadController是客户端(JAVA),这将是调用服务器SVS-BA-道控制器与基本URL. csvUpload包含基本URL:http:// localhost:8082/svs-ba-dao/csvUpload?parentPkId =&file = multipartFile

@CrossOrigin
@RestController
public class UploadController {

    private static final Logger log = LogManager.getLogger(UploadController.class);

    @Value("${salama.dao.csvUpload.rest.url}")
    private String csvUpload;

    @Autowired
    UploadHelperService uploadHelperService;

    @PostMapping(value = "/csvUpload")
    public String csvUpload(@QueryParam("parentPkId") String parentPkId, @RequestParam("file") MultipartFile file ) throws IllegalStateException, IOException{

        log.info("Calling csvUpload :" + csvUpload);
        final HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

        File cnvFile = uploadHelperService.multipartToFile(file,file.getOriginalFilename());
        System.out.println("Converted File Name is -->"+cnvFile.getName());
        final …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc resttemplate spring-boot

5
推荐指数
1
解决办法
615
查看次数

当我在Spring Boot应用程序中使用CommonsMultipartResolver时,MultipartFile为null

我想在我的Spring Boot应用程序中实现上传处理程序方法.我想用CommonsMultipartResolver而不是StandardServletMultipartResolver.我有以下问题:

我的控制器方法参数(文件)始终设置为null.我在java文档中看到HiddenHttpMethodFilter: 由于需要检查POST body参数,因此在多部分POST请求的情况下,此过滤器需要在多部分处理之后运行.

我试图为multipartFilter bean设置顺序,但它没有帮助.当我调试时,我发现HiddenHttpMethodFilter之前总是调用它MultipartFilter.我使用的是Spring Boot 1.3.0.RELEASE和基于Java的配置.如何设置的顺序 HiddenHttpMethodFilter来之后MultipartFilter

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();        
    resolver.setMaxUploadSizePerFile(52428800); 
    return resolver;
}

@Bean
@Order(0)
public MultipartFilter multipartFilter() {
        MultipartFilter multipartFilter = new MultipartFilter();
    multipartFilter.setMultipartResolverBeanName("multipartResolver");
    return multipartFilter;
}

@RequestMapping(value = "/{userId}", method = RequestMethod.POST)
@ResponseBody
public FileTransport create(@PathVariable("userId") Long userId,
        MultipartFile file) throws IOException {
    //return fileService.create(userId, file);
    return new FileTransport();
}
Run Code Online (Sandbox Code Playgroud)

如果我修改方法以包括如下所示的请求参数:

@RequestParam(name …

spring file-upload spring-boot

4
推荐指数
1
解决办法
5852
查看次数