Issue
Hi all i am trying to get ServletContext in my following method but it is not getting injected while passing it as an parameter as it should be injected by the spring automatically but its not working don't know why this is the following code inside which I want servletcontext
@RequestMapping(value="/savetodo", method = RequestMethod.POST)
public String saveTodo(@ModelAttribute("todoEntity") TodoEntity todoEntity,Model m,ServletContext sc) {
todoEntity.setTodoDate(new Date());
ArrayList<TodoEntity> allTodosArrayList = (ArrayList<TodoEntity>) sc.getAttribute("allTodos");
if (allTodosArrayList==null) {
allTodosArrayList = new ArrayList<TodoEntity>();
}
allTodosArrayList.add(todoEntity);
sc.setAttribute("allTodos",allTodosArrayList);
allTodosArrayList.stream().forEach(System.out :: println);
m.addAttribute("page","viewtodos");
return "home";
}
but when I tried using the autowiring by declaring ServletContext as an class variable along with autowired annotation like this and removing the parameter from method
@Autowired
ServletContext sc;
it just worked fine so my whole point is why it is not working when I am passing it as an parameter.
Solution
ServletContext is not one of the auto-resolving method parameters in Spring controllers https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/web.html#mvc-ann-methods
Answered By - J Asgarov
Answer Checked By - Willingham (JavaFixing Volunteer)