Я пытаюсь связать приложение Grails с приложением Springboot. Я пытаюсь загрузить файл в приложение Springboot, ранее загруженный в Grails. Это код моего контроллера Springboot:
@ResponseBody
@PostMapping(value = "/save", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
def save(@Valid @ModelAttribute SaveRequest request) {
//Some logic
}
Класс saveRequest содержит некоторые проверки, которые необходимо применить к запросу
class SaveHotelAccreditationRequest {
//Other fields
@NotNull
MultipartFile image
}
Я установил свойства в приложении. Файл свойств выглядит так:
spring.http.multipart.enabled = true
spring.http.multipart.location=/home/user/temp
Я использую библиотеки commons-io и commons-fileupload Apache. Я установил многочастный преобразователь следующим образом:
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(2*1024*1024);
return multipartResolver;
}
Это код моего приложения Grails
CredentialsProvider credsProvider = new BasicCredentialsProvider()
credsProvider.setCredentials(
AuthScope.ANY,
new UsernamePasswordCredentials(userName, password))
CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.build()
try {
HttpPost httpPost = new HttpPost(url)
MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create()
reqEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
reqEntity.addBinaryBody('image', file, ContentType.MULTIPART_FORM_DATA, file.getName())
//Other fields
httpPost.setEntity(reqEntity.build())
System.out.println("Executing request " + httpPost.getRequestLine())
CloseableHttpResponse response = httpclient.execute(httpPost)
try {
System.out.println("----------------------------------------")
System.out.println(response.getStatusLine())
System.out.println(EntityUtils.toString(response.getEntity()))
} finally {
response.close()
}
} finally {
httpclient.close()
}
И когда я запускаю запрос, я получаю следующее сообщение об ошибке:
2020-05-02 02:37:24 | WARN | org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolved
exception caused by Handler execution: org.springframework.validation.BindException: org.springframework.validatio
n.BeanPropertyBindingResult: 1 errors
Field error in object 'saveHotelAccreditationRequest' on field 'image': rejected value [null]; codes [NotNull.saveRequest.image,NotNull.image,NotNull.org.springframework.web.multipart.MultipartFile,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [saveRequest.image,image]; arguments []; default message [image]]; default message [may not be null]
Я пытался использовать почтальон, и я получаю то же сообщение об ошибке. Я не могу понять, что мне здесь не хватает, любая помощь будет оценена.