Пружинный контроллер не должен ничего делать (пустота, тело ответа) - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть проблема, похожая на эту, решение не работает так, как я хотел:

Spring MVC как создать контроллер без представления возврата (String)?

У меня есть форма, которая должна передать файл:

пример

И контроллер для него:

    @PostMapping("/uploadFile")
    public @ResponseBody void uploadFile(Model model, @RequestParam("file") MultipartFile multipartFile) throws InterruptedException {
        //, RedirectAttributes redirectAttributes) throws InterruptedException {
Reservation reservation=new Reservation(  );
    fileService.uploadFile( multipartFile );
    File file = new File("\\car-rental\\src\\main\\resources\\static\\attachments", multipartFile.getOriginalFilename());
log.info( "name and path " + file.getName() + file.getPath() );

Picname picname=new Picname();
            picname.setPicnameAsString(file.getName() );

log.info( "picname file " + picname.getPicnameAsString() );
        TimeUnit.SECONDS.sleep(2);



        }
}

I хотите, чтобы контроллер ТОЛЬКО выполнял логи c, не возвращая ничего: он возвращает, однако, пустую страницу:

возвращена пустая страница

Как сделать так, чтобы она не возвращалась что-нибудь, просто пребывание на сайте с формой? Единственная идея состояла в том, чтобы установить задержку с помощью .sleep (), но это был бы обходной путь, и я хотел бы решить ее с помощью более чистого решения

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Для решения вашей проблемы вам может потребоваться изменить тип возврата вашей функции. Использование типа возврата ResponseEntity может быть более подходящим, чем использование типа возврата ResponseBody.

0 голосов
/ 06 апреля 2020

Контроллеры возвращают ответ, поскольку вы разрабатываете приложение MVC, которое будет получать запросы POST к указанной вами конечной точке.

Что вы можете сделать, это объявить контроллер как @RestController, который возвращает ResponseEntity, указывающий, что все прошло нормально, или любой другой соответствующий ответ в случае сбоя.

@RestController
public class ControllerClassName{
    @PostMapping("/uploadFile")
    public ResponseEntity<?> uploadFile(Model model, @RequestParam("file") MultipartFile multipartFile) throws InterruptedException {
        try{
            // logic
            return ResponseEntity.ok().build();
        }catch(Exception e){
            return ResponseEntity.badRequest().build();
        }   
    }
}
...