It is really good for a developer to see the exceptions thrown by the application. However, for our users, they bear little value. We will therefore translate them. In order to do that, we have to inject our application's MessageSource
class into our controller's constructor:
private final MessageSource messageSource; @Autowired public PictureUploadController(PictureUploadProperties uploadProperties, MessageSource messageSource) { picturesDir = uploadProperties.getUploadPath(); anonymousPicture = uploadProperties.getAnonymousPicture(); this.messageSource = messageSource; }
Now, we can retrieve messages from our messages bundle:
@ExceptionHandler(IOException.class) public ModelAndView handleIOException(Locale locale) { ModelAndView modelAndView = new ModelAndView("profile/uploadPage"); modelAndView.addObject("error", messageSource.getMessage("upload.io.exception", null, locale)); return modelAndView; } @RequestMapping("uploadError") public ModelAndView onUploadError(Locale locale) { ModelAndView modelAndView = new ModelAndView("profile/uploadPage"); modelAndView.addObject("error", messageSource.getMessage("upload.file.too.big", null, locale)); return modelAndView; }
Here are the English messages:
upload.io.exception=An error occurred while uploading the file. Please try again. upload.file.too.big=Your file is too big.
Now, the French ones:
upload.io.exception=Une erreur est survenue lors de l'envoi du fichier. Veuillez réessayer. upload.file.too.big=Votre fichier est trop gros.
3.142.200.109