package com.baeldung.web.controller; import com.baeldung.model.Employee; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util.*; @SessionAttributes("employees") @Controller @ControllerAdvice public class EmployeeController { Map employeeMap = new HashMap<>(); @ModelAttribute("employees") public void initEmployees() { employeeMap.put(1L, new Employee(1L, "John", "223334411", "rh")); employeeMap.put(2L, new Employee(2L, "Peter", "22001543", "informatics")); employeeMap.put(3L, new Employee(3L, "Mike", "223334411", "admin")); } @RequestMapping(value = "/employee", method = RequestMethod.GET) public ModelAndView showForm() { return new ModelAndView("employeeHome", "employee", new Employee()); } @RequestMapping(value = "/employee/{Id}", produces = {"application/json", "application/xml"}, method = RequestMethod.GET) public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { return employeeMap.get(Id); } @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) public String submit(@ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) { if (result.hasErrors()) { return "error"; } model.addAttribute("name", employee.getName()); model.addAttribute("contactNumber", employee.getContactNumber()); model.addAttribute("workingArea", employee.getWorkingArea()); model.addAttribute("id", employee.getId()); employeeMap.put(employee.getId(), employee); return "employeeView"; } @ModelAttribute public void addAttributes(final Model model) { model.addAttribute("msg", "Welcome to the Netherlands!"); } @RequestMapping(value = "/employees/{name}", method = RequestMethod.GET) @ResponseBody public ResponseEntity> getEmployeeByNameAndBeginContactNumber(@PathVariable final String name, @MatrixVariable final String beginContactNumber) { final List employeesList = new ArrayList(); for (final Map.Entry employeeEntry : employeeMap.entrySet()) { final Employee employee = employeeEntry.getValue(); if (employee.getName().equalsIgnoreCase(name) && employee.getContactNumber().startsWith(beginContactNumber)) { employeesList.add(employee); } } return new ResponseEntity<>(employeesList, HttpStatus.OK); } @RequestMapping(value = "/employeesContacts/{contactNumber}", method = RequestMethod.GET) @ResponseBody public ResponseEntity> getEmployeeBycontactNumber(@MatrixVariable(required = true) final String contactNumber) { final List employeesList = new ArrayList(); for (final Map.Entry employeeEntry : employeeMap.entrySet()) { final Employee employee = employeeEntry.getValue(); if (employee.getContactNumber().equalsIgnoreCase(contactNumber)) { employeesList.add(employee); } } return new ResponseEntity<>(employeesList, HttpStatus.OK); } @RequestMapping(value = "employeeData/{employee}", method = RequestMethod.GET) @ResponseBody public ResponseEntity> getEmployeeData(@MatrixVariable final Map matrixVars) { return new ResponseEntity<>(matrixVars, HttpStatus.OK); } @RequestMapping(value = "employeeArea/{workingArea}", method = RequestMethod.GET) @ResponseBody public ResponseEntity> getEmployeeByWorkingArea(@MatrixVariable final Map> matrixVars) { final List employeesList = new ArrayList(); final LinkedList workingArea = matrixVars.get("workingArea"); for (final Map.Entry employeeEntry : employeeMap.entrySet()) { final Employee employee = employeeEntry.getValue(); for (final String area : workingArea) { if (employee.getWorkingArea().equalsIgnoreCase(area)) { employeesList.add(employee); break; } } } return new ResponseEntity<>(employeesList, HttpStatus.OK); } }