This question already has an answer here:
I'm looking for a cleaner way (in Spring 3.2) to get the current locale than explicitly calling LocaleContextHolder.getLocale() at the start of each Controller method. It has to be compatible with Java annotation, as I'm not using the XML config. Here's what I'm doing currently.
@Controller
public class WifeController {
@Autowired
private MessageSource msgSrc;
@RequestMapping(value = "/wife/mood")
public String readWife(Model model, @RequestParam("whatImDoing") String iAm) {
Locale loc = LocaleContextHolder.getLocale();
if(iAm.equals("playingXbox")) {
model.addAttribute( "statusTitle", msgSrc.getMessage("mood.angry", null, loc) );
model.addAttribute( "statusDetail", msgSrc.getMessage("mood.angry.xboxdiatribe", null, loc) );
}
return "moodResult";
}
}
As an alternative, you can also autowire the
HttpServletRequest
and then use
request.getLocale()
everywhere in your Controller.In Spring 3.2 reference docs, section 17.3.3, Supported method argument types:
So all you'd need to do is receive an instance of
Locale
as an argument in every method: