Изучить исходный запрос неудавшегося остального вызова MultipartFile Spring - PullRequest
0 голосов
/ 04 июля 2019

Я использую аннотацию spring-web-5.0.7.RELEASE.jar @ControllerAdvice

При неудачном запросе @ControllerAdvice автоматически выдаст http 500 с некоторыми сообщениями.Мой класс, который делает это:

@ControllerAdvice
public class ExceptionControllerAdvice {
    protected final Log log = LogFactory
            .getLog(ExceptionControllerAdvice.class);

    @ExceptionHandler({ DataStoreException.class, Exception.class })
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ResponseEntity<ErrorResponse> exceptionHandler(Exception ex) {
        log.error(ex.toString(),ex);
        ErrorResponse error = new ErrorResponse();
        error.setErrorCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
        if (ex instanceof DataStoreException) {
            error.setMessage(((DataStoreException) ex).getExceptionMessage());
        } else if (ex instanceof UserContextException) {
            error.setMessage(((UserContextException) ex).getMessage());
        } else {
            error.setMessage("Please contact your administrator");
        }
        return new ResponseEntity<ErrorResponse>(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

Основываясь на журналировании выше, я вижу много этого сообщения об ошибке:

org.springframework.web.multipart.MultipartException: Current request is not a multipart request: org.springframework.web.multipart.MultipartException: Current request is not a multipart request
    at deployment.docstore.war//org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:196)
    at deployment.docstore.war//org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:112)
    at deployment.docstore.war//org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)
    at deployment.docstore.war//org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
    at deployment.docstore.war//org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:131)
    at deployment.docstore.war//org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    at deployment.docstore.war//org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
    at deployment.docstore.war//org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
    at deployment.docstore.war//org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at deployment.docstore.war//org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
--- and so on ---

Как отследить, что было запросом,что он получил, чтобы прийти в это состояние?

К вашему сведению, конечные точки настраиваются с использованием типичного @RestController и достижимы через командную строку curl
curl -k --header "$HEADER" -X POST "${BASE_URL}/scans/customers/${CUSTOMER_ID}" -F file=@/Users/me/Downloads/$FILENAME -F "filename=$FILENAME"

.Вышеуказанное исключение вызывается другой программой (а не curl).

@RestController
@RequestMapping("/api/v3/artifacts")
public class MyClass {

  @RequestMapping(value = "scans/customers/{customerId}", method = RequestMethod.POST)
  @Produces(MediaType.TEXT_PLAIN)
  public String saveFile(@RequestParam("file") MultipartFile file, @PathVariable Long customerId,
            @RequestParam(name = "filename") String fileName) throws 
  Exception {

        String result = "NEWFILEID_IS_123"; //just an example
        return result;
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...