отправка многочастного запроса с помощью Springboot rest client всегда выдает ошибку 400 BAD_REQUEST - PullRequest
0 голосов
/ 05 октября 2018

я видел много примеров в интернете при отправке multi-part запроса от Spring-Boot Rest Template , но на самом деле у меня ничего не получалось, я всегда получал 400 плохихrequest.i не уверен, что ошибка в классе FileSystemResource, который я использую для хранения сведений о файле.

Это мой класс контроллера.

@RequestMapping(method = RequestMethod.POST, consumes = { "multipart/form-data" },value = "/submit")
public ResponseEntity securedAcceptJob(
              @RequestParam(value = "files" , required = false)MultipartFile multipartFile,
              @RequestParam(value = "name" , required = true) String name
              ) throws NotInitializedException,CouldNotSendException {}


public void submitResponse(SrResultEntity srResultEntity){
    String path = "des/submit";
    LinkedMultiValueMap<String,Object> requestEntity = new LinkedMultiValueMap<>();
    requestEntity.add("name",srResultEntity.getTitle());
    requestEntity.add("files",getUserFileResource());

    HttpHeaders headers = new HttpHeaders();
    headers.set(HttpHeaders.ACCEPT,MediaType.APPLICATION_JSON_UTF8_VALUE);
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);

    HttpEntity<LinkedMultiValueMap<String,Object>> httpEntity = new HttpEntity(requestEntity, headers);

    URI uri = UriComponentsBuilder.fromUriString(buildPath(path)).buildAndExpand(pathVariables).toUri();

    final ResponseEntity<String> stringResponseEntity =
        restClientHelper.getRestTemplate().exchange(uri,HttpMethod.POST, httpEntity, String.class);
}

public static Resource getUserFileResource() throws IOException {
        //todo replace tempFile with a real file
        Path tempFile = Files.createTempFile("upload-test-file", ".txt");
        Files.write(tempFile, "some test content...\nline1\nline2".getBytes());
        System.out.println("uploading: " + tempFile);
        File file = tempFile.toFile();
        //to upload in-memory bytes use ByteArrayResource instead
        return new FileSystemResource(file);
    }

Я не могу понятьЧто я должен изменить в коде, это вывод, когда я отлаживаю приложение.

<{name = [dwad], message = [null], email = [m@yhaoo.com], files = [file [/tmp/upload-test-file5318593104290391569.txt]]}, {Accept = [application / json; charset = UTF-8], X-Auth-Token = [6ce45ed4-3278-4531-98fa-fe5949000380], Content-Type = [multipart / form-data]}>

ошибка все еще существует, даже если я не отправляю файл в запросе.

трассировка стека:

org.springframework.web.client.HttpClientErrorException:400 неверный запрос на org.springframework.web.client.DefaultResponseErrorHandler.handleError (DefaultResponseErrorHandler.java:94) ~ [spring-web-5.0.8.RELEASE.jar: 5.0.8.RELEASE] на org.springframework.wec.,~ [spring-web-5.0.8.RELEASE.jar: 5.0.8.RELEASE] по адресу org.springframework.web.client.RestTemplate.handleResponse (RestTemplate.java: 766) ~ [spring-web-5.0.8.RELEASE.jar: 5.0.8.RELEASE] в org.springframework.web.client.RestTemplate.doExecute (RestTemplate.java:724) ~ [spring-web-5.0.8.RELEASE.jar: 5.0.8.RELEASE] at org.springframework.web.client.RestTemplate.execute (RestTemplate.java:698) ~ [spring-web-5.0.8.RELEASE.jar: 5.0.8.RELEASE] на org.springframework.web.client.RestTemplate.exchange (RestTemplate.java:619) ~ [spring-web-5.0.8.RELEASE.jar: 5.0.8.RELEASE] на com.itesco.sam2.restclient.RestServiceClient.multiPartPost (RestServiceClient.java:52) ~ [classes /: na] в com.itesco.sam2.restclient.des.DesServiceClient.submitResponse (DesServiceClient.java:131) ~ [classes /: na] в com.itesco.sam2.ui.views.des.FileListView.sendReplies (FileListView.java:149) ~ [classes /: na] в com.itesco.sam2.ui.views.AbstractEditorDialog.saveClicked (AbstractEditorDialog.java:202) ~ [классы /: na] на com.itesco.sam2.ui.views.AbstractEditorDialog.lambda $ open $ cc13c671 $ 1 (AbstractEditorDialog.java:191) ~ [классы /: на] на com.vaadin.flow.component.ComponentEventBus.fireEvent (ComponentEventBus.java:132) ~ [flow-server-1.0.0.jar: na] в com.vaadin.flow.component.ComponentEventBus.handleDomEvent (ComponentEventBus.java:326) ~ [flow-server-1.0.0.jar: na] на com.vaadin.flow.component.ComponentEventBus.lambda $ addDomTrigger $ 5ee67f2b $ 1 (ComponentEventBus.java:190) ~ [flow-server-1.0.0.jar: na] на com.vaadin.flow.internal.nodefeature.ElementListenerMap.lambda $ fireEvent $ 2 (ElementListenerMap.java:378) ~ [flow-server-1.0.0.jar: na] в java.util.ArrayList.forEach (ArrayList.java:1257) ~ [na: 1.8.0_171] в com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent (ElementListenerMap.java:378) ~ [flow-server-1.0.0.jar: na] в com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode (EventRpcHandler.java:58) ~ [flow-server-1.0.0.jar: na] в com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle (AbstractRpcInvocationHandler.java:63:) ~ [flow-server-1.0.0.jar: na] at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationДанные (ServerRpcHandler.java:377) ~ [flow-server-1.0.0.jar: na] в com.vaadin.flow.server.communication.ServerRpcHandler.lambda $ handleInvocations $ 0 (ServerRpcHandler.java:367) ~ [flow-server-1.0.0.jar: na] at java.util.ArrayList.forEach (ArrayList.java:1257) ~ [na: 1.8.0_171]

...