Spring MVC  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod;
@Controller @RequestMapping("/customers") public class CustomerController { @Autowired private CustomerDataService customerDataService;
@RequestMapping(method = RequestMethod.GET) private String handleRequest (Model model) { model.addAttribute("customerList", customerDataService.getAllUsers()); return "customers"; } }
Original Post
 import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths;
@Controller @RequestMapping("/upload") public class FileUploadController {
@RequestMapping(method = RequestMethod.GET) public String handleGet () { return "file-upload"; }
@RequestMapping(method = RequestMethod.POST) public String handlePost (@RequestParam("user-file") MultipartFile multipartFile, Model model) throws IOException {
String name = multipartFile.getOriginalFilename(); BufferedWriter w = Files.newBufferedWriter(Paths.get("d:\\filesUploaded\\" + name)); w.write(new String(multipartFile.getBytes())); w.flush();
model.addAttribute("msg", "File has been uploaded: "+name); return "response"; }
}
Original Post
 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.number.CurrencyStyleFormatter; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;
@Controller @RequestMapping("trades") public class TradeController {
@Autowired private TradeService tradeService;
@InitBinder private void customizeBinding (@PathVariable("tradeId") long tradeId, WebDataBinder binder) { Trade trade = tradeService.getTradeById(tradeId); if (trade == null) { return; }
CurrencyStyleFormatter currencyFormatter = new CurrencyStyleFormatter(); currencyFormatter.setCurrency( "Buy".equals(trade.getBuySell()) ? trade.getBuyCurrency() : trade .getSellCurrency()); binder.addCustomFormatter(currencyFormatter, "amount"); }
@RequestMapping("/{tradeId:\\d+}") public String handleTradeRequest (@PathVariable("tradeId") long tradeId, Model model) { Trade trade = tradeService.getTradeById(tradeId); if (trade == null) { model.addAttribute("msg", "No trade found"); return "no-trade-page"; } model.addAttribute("trade", trade); return "trade-page"; } }
Original Post
 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod;
import javax.validation.Valid;
@Controller @RequestMapping("/register") public class UserRegistrationController {
@Autowired private UserService userService;
@RequestMapping(method = RequestMethod.GET) public String handleGetRequest (Model model) { model.addAttribute("user", new User()); return "user-registration"; }
@RequestMapping(method = RequestMethod.POST) public String handlePostRequest (@Valid @ModelAttribute("user") User user, BindingResult bindingResult, Model model) { if (bindingResult.hasErrors()) { return "user-registration"; }
userService.saveUser(user); return "registration-done"; }
Original Post
 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;
import javax.inject.Provider; import javax.servlet.http.HttpServletRequest;
@Controller @RequestMapping("/trades") public class TradeController {
@Autowired private Provider<Visitor> visitorProvider;
@RequestMapping("/**") public String handleRequestById (Model model, HttpServletRequest request) { model.addAttribute("msg", "trades request, serving page " + request.getRequestURI()); visitorProvider.get() .addPageVisited(request.getRequestURI()); return "traders-page"; } }
Original Post
 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;
@Controller @RequestMapping("users") public class UserController { @Autowired private UserService userService;
@RequestMapping("{userId}") public String handleRequestById (@ModelAttribute("user") User user, Model model) { model.addAttribute("msg", "user : " + user); return user!=null && "admin".equals(user.getRole()) ? "admin-page" : "user-page"; }
@ModelAttribute("user") public User getUser (@PathVariable("userId") long userId) { return userService.getUserById(userId); } }
Original Post
 import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam;
import java.time.LocalDateTime; import java.util.logging.Logger;
@Controller @RequestMapping("users") public class UserController { private static final Logger LOGGER = Logger.getLogger(UserController.class.getName());
private static int counter = 0;
@RequestMapping public String handleRequest (Model model) { model.addAttribute("msg", "user request received"); LOGGER.info(model.toString()); return "my-page"; }
@RequestMapping("{id}") public String handleRequestById (@PathVariable("id") String id, Model model) { model.addAttribute("msg", "user request received for the id : " + id); LOGGER.info(model.toString()); return "my-page"; }
@ModelAttribute("time") public LocalDateTime getRequestTime () { return LocalDateTime.now(); }
@ModelAttribute("visits") public int getRequestCount () { return ++counter; }
@ModelAttribute("querier") public void populateIds (@RequestParam(value = "querier", required = false) String querier, Model model) { model.addAttribute("querier", querier == null ? "quest" : querier); } }
Original Post
 import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam;
import java.util.logging.Logger;
@Controller @RequestMapping("trades") public class TradeController {
private static final Logger LOGGER = Logger.getLogger(TradeController.class.getName());
@RequestMapping public String handleTradeRequest (Trade trade, Model model) { String msg = String.format("trade request. buySell: %s, buyCurrency: %s, sellCurrency: %s", trade.getBuySell(), trade.getBuyCurrency(), trade.getSellCurrency()); LOGGER.info(msg); model.addAttribute("msg", msg); return "my-page2"; }
@RequestMapping("{buySell}/{buyCurrency}/{sellCurrency}") public String handleTradeRequest2 (Trade trade, Model model) { String msg = String.format("trade request. buySell: %s, buyCurrency: %s, sellCurrency: %s", trade.getBuySell(), trade.getBuyCurrency(), trade.getSellCurrency()); LOGGER.info(msg); model.addAttribute("msg", msg); return "my-page"; }
@RequestMapping("paramTest") public String handleTradeRequest (@RequestParam("buySell") String buySell, @RequestParam("buyCurrency") String buyCurrency, @RequestParam("sellCurrency") String sellCurrency, Model map) { String msg = String.format("trade request. buySell: %s, buyCurrency: %s, sellCurrency: %s", buySell, buyCurrency, sellCurrency); LOGGER.info(msg); map.addAttribute("msg", msg); return "my-page"; }
@RequestMapping("pathTest/{buySell}/{buyCurrency}/{sellCurrency}") public String handleTradeRequest3 (@PathVariable("buySell") String buySell, @PathVariable("buyCurrency") String buyCurrency, @PathVariable("sellCurrency") String sellCurrency, Model map) { String msg = String.format("trade request. buySell: %s, buyCurrency: %s, sellCurrency: %s", buySell, buyCurrency, sellCurrency); LOGGER.info(msg); map.addAttribute("msg", msg); return "my-page"; } }
Original Post
 @Controller @RequestMapping("employees") public class EmployeeController {
private static final Logger LOGGER = Logger.getLogger(EmployeeController.class.getName());
@RequestMapping(params = "dept") public String handleEmployeeRequestByDept (@RequestParam("dept") String deptName, Model map) { LOGGER.info("employee request by dept : " + deptName); map.addAttribute("msg", "employee " + deptName); return "my-page"; }
/** * This won't be mapped if code is not compiled with debugging information */ @RequestMapping(params = "state") public String handleEmployeeRequestByArea (@RequestParam String state, Model map) { LOGGER.info("employee request by state : " + state); map.addAttribute("msg", "Employee request by area: " + state); return "my-page"; }
@RequestMapping(params = {"dept", "state"}) public String handleEmployeeRequestByDept (@RequestParam("dept") String deptName, @RequestParam("state") String stateCode, Model map) { LOGGER.info("Employee request by dept and state code : " + deptName + ", " + stateCode); map.addAttribute("msg", "Employee request by dept and state code : " + deptName + ", " + stateCode); return "my-page"; }
@RequestMapping("{id}/messages") public String handleEmployeeMessagesRequest (@PathVariable("id") String employeeId, @RequestParam Map<String, String> queryMap, Model model) { LOGGER.info("employee request by id and query map : " + employeeId + ", " + queryMap .toString()); model.addAttribute("msg", "employee request by id and query map : " + employeeId + ", " + queryMap.toString()); return "my-page"; }
@RequestMapping(value = "{id}/paystubs", params = "months") public String handleRequest4 (@PathVariable("id") String employeeId, @RequestParam("months") int previousMonths, Model model) { LOGGER.info("employee request by id and paystub for the previous months : " + employeeId + ", " + previousMonths); model.addAttribute("msg", "employee request by id and paystub previous months : " + employeeId + "," + " " + previousMonths); return "my-page"; }
@RequestMapping(value = "{id}/paystubs", params = {"startDate", "endDate"}) public String handleRequest4 ( @PathVariable("id") String employeeId, @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @RequestParam ("startDate") LocalDate startDate, @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @RequestParam ("endDate") LocalDate endDate, Model model) {
LOGGER.info("employee request by id and paystub dates : " + employeeId + ", " + startDate + ", " + endDate); model.addAttribute("msg", "employee request by id and paystub dates : " + employeeId + ", " + startDate + ", " + endDate); return "my-page"; }
@RequestMapping(value = "{id}/report") public String handleEmployeeReportRequest (@PathVariable("id") String id, @RequestParam(value = "project", required = false) String projectName, Model model) {
LOGGER.info("employee report request by id and project name : " + id + ", " + projectName); model.addAttribute("msg", "employee report request by id and project name : " + id + ", " + projectName); return "my-page"; } }
Original Post
 import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;
/** * Using mutually exclusive regex, which can be used * to avoid ambiguous mapping exception */ @Controller @RequestMapping("/dept") public class DeptController {
@RequestMapping("{id:[0-9]+}") public String handleRequest(@PathVariable("id") String userId, Model model){ model.addAttribute("msg", "profile id: "+userId); return "my-page";
}
@RequestMapping("{name:[a-zA-Z]+}") public String handleRequest2 (@PathVariable("name") String deptName, Model model) { model.addAttribute("msg", "dept name : " + deptName); return "my-page"; } }
Original Post
 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;
@Controller @RequestMapping("/users") public class UserControllerHeader {
@RequestMapping(headers = "id=4") public String handleAllUsersRequest() { System.out.println("got header id = 4"); return ""; }
@RequestMapping(headers = "id=10") public String handleAllUsersRequest2() { System.out.println("got header id = 10"); return ""; } }
Original Post
 @Controller @RequestMapping("/users") public class UserControllerHttpMethods {
@RequestMapping(value= "{id}", method = {RequestMethod.GET}) public String handleGet(@PathVariable("id") String userId){ System.out.println("in get method"); return ""; }
@RequestMapping(value= "{id}", method = {RequestMethod.DELETE}) public String handleDelete(@PathVariable("id") String userId){ System.out.println("in delete method"); return ""; } }
Original Post
 @Controller @RequestMapping("/users") public class UserControllerParams {
@RequestMapping(params = "id=4") public String handleUserId4() { System.out.println("got param id = 4"); return ""; }
@RequestMapping(params = "id=10") public String handleUserId10() { System.out.println("got param id = 10"); return ""; } }
Original Post
 @Controller @RequestMapping("/**/users") public class UserControllerPath {
@RequestMapping public void handleAllUsersRequest(HttpServletRequest request){ System.out.println(request.getRequestURL()); } }
Original Post
 @Controller @RequestMapping("/users") public class UserControllerProduce {
@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody String handleJson() { System.out.println("Got json request"); return "{ \"userName\": \"Joe\"}"; }
@RequestMapping(produces = MediaType.APPLICATION_XML_VALUE) public @ResponseBody String handleXML() { System.out.println("Got xml request"); return "<userName>Joe</userName>"; } }
Original Post
 import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping;
@Controller @RequestMapping("/users") public class UserControllerConsume {
@RequestMapping(consumes = MediaType.APPLICATION_JSON_VALUE) public String handleJson(@RequestBody String s) { System.out.println("json body : " + s); return ""; }
@RequestMapping(consumes = MediaType.APPLICATION_XML_VALUE) public String handleXML(@RequestBody String s) { System.out.println("xml body " + s); return ""; } }
Original Post
 @Controller @RequestMapping("message") public class MyController {
@RequestMapping(consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaType.TEXT_HTML_VALUE, method = RequestMethod.GET) @ResponseBody public String handleRequest (@RequestBody byte[] bytes, @RequestBody String str) {
System.out.println("body in bytes: " + bytes); System.out.println("body in string: " + str);
return "<html><body><h1>Hi there</h1></body></html>"; }
@RequestMapping(method = RequestMethod.POST, consumes = MediaType .APPLICATION_FORM_URLENCODED_VALUE) @ResponseStatus(HttpStatus.OK) public void handleFormRequest (@RequestBody MultiValueMap<String, String> formParams) { System.out.println("form params received " + formParams); }
@RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @ResponseStatus(HttpStatus.CREATED) public void handleFormPutRequest (@RequestBody MultiValueMap<String, String> formParams) { System.out.println("form params received " + formParams); }
}
Original Post
 @Controller @RequestMapping("users") public class UserController {
@Autowired private UserService userService;
@RequestMapping(value = "register", method = RequestMethod.POST, consumes = MediaType.APPLICATION_XML_VALUE) @ResponseStatus(HttpStatus.CREATED) public void handleXMLPostRequest (@RequestBody User user) { System.out.println("saving user: " + user); userService.saveUser(user); }
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE) @ResponseStatus(HttpStatus.OK) @ResponseBody public UserList handleAllUserRequest () { UserList list = new UserList(); list.setUsers(userService.getAllUsers()); return list; } }
Original Post
 @Controller @RequestMapping("users") public class UserController {
@Autowired private UserService userService;
@RequestMapping(value = "register", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) public void handleJsonPostRequest (@RequestBody User user, Model model) { System.out.println("saving user: "+user); userService.saveUser(user); }
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) @ResponseBody public List<User> handleAllUserRequest () { return userService.getAllUsers(); } }
Original Post
 @RestController @RequestMapping("users") public class UserController {
@Autowired private UserService userService;
@RequestMapping(value = "register", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) public void handleJsonPostRequest (@RequestBody User user, Model model) { System.out.println("saving user: " + user); userService.saveUser(user); }
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) public List<User> handleAllUserRequest () { return userService.getAllUsers(); }
}
Original Post
 @Controller @RequestMapping public class MyController {
@RequestMapping("test") public ResponseEntity<String> handleRequest (RequestEntity<String> requestEntity) { System.out.println("request body : " + requestEntity.getBody()); HttpHeaders headers = requestEntity.getHeaders(); System.out.println("request headers : " + headers); HttpMethod method = requestEntity.getMethod(); System.out.println("request method : " + method); System.out.println("request url: " + requestEntity.getUrl());
ResponseEntity<String> responseEntity = new ResponseEntity<>("my response body", HttpStatus.OK); return responseEntity; }
@RequestMapping("/user") public ResponseEntity<String> handleUserRequest (RequestEntity<User> requestEntity) { User user = requestEntity.getBody(); System.out.println("request body: " + user); System.out.println("request headers " + requestEntity.getHeaders()); System.out.println("request method : " + requestEntity.getMethod());
MultiValueMap<String, String> headers = new HttpHeaders(); headers.put("Cache-Control", Arrays.asList("max-age=3600"));
ResponseEntity<String> responseEntity = new ResponseEntity<>("my response body", headers, HttpStatus.OK); return responseEntity; } }
Original Post
 @Controller public class MyController {
@RequestMapping("test") public String handleTestRequest (Model model, HttpServletRequest request, HttpServletResponse response) {
Cookie[] cookies = request.getCookies(); if (cookies != null) { Arrays.stream(cookies) .forEach(c -> System.out.println(c.getName() + "=" + c.getValue())); }
Cookie newCookie = new Cookie("testCookie", "testCookieValue"); newCookie.setMaxAge(24 * 60 * 60); response.addCookie(newCookie);
model.addAttribute("msg", "test method msg"); return "my-page"; }
@RequestMapping("test2") public String handleRequest ( @CookieValue(value = "testCookie", defaultValue = "defaultCookieValue") String cookieValue, Model model) { System.out.println(cookieValue); model.addAttribute("cookieValue", cookieValue);
return "my-page2"; } }
Original Post
Redirect Example  @Controller public class MyController {
@RequestMapping(value = "test/{id}") public RedirectView handleTestRequest (Model model) { model.addAttribute("attr", "attrVal"); model.addAttribute("testPath", "pathValue");
RedirectView rv = new RedirectView(); rv.setContextRelative(true); rv.setUrl("/test2/{testPath}/{id}"); return rv; }
@RequestMapping("test2/{testPath}/{id}") public String handleRequest (@PathVariable("testPath") String testPath, @PathVariable("id") String id, @RequestParam("attr") String attr, Model model) {
model.addAttribute("testPath", testPath); model.addAttribute("id", id); model.addAttribute("attr", attr); return "my-page"; } }
Original Post
Redirect Example  @Controller public class MyController {
@RequestMapping("test") public RedirectView handleTestRequest (Model model) { model.addAttribute("myModelAttribute", "attributeVal"); RedirectView rv = new RedirectView(); rv.setUrl("test2"); return rv; }
@RequestMapping("test2") public String handleRequest (@RequestParam Map<String, String> params, Model model) { model.addAttribute("params", params); return "my-page"; } }
Original Post
redirect: prefix Example  @Controller public class MyController {
@RequestMapping(value = "test/{id}") public String handleTestRequest (@PathVariable("id") String id, Model model) { if (!id.matches("\\d+")) { model.addAttribute("msg", "id should only have digits"); return "error-page"; } else { model.addAttribute("attr", "attrVal"); return "redirect:/test2/{id}"; } }
@RequestMapping("test2/{id}") public String handleRequest (@PathVariable("id") String id, @RequestParam("attr") String attr, Model model) {
model.addAttribute("id", id); model.addAttribute("attr", attr); return "my-page"; } }
Original Post
forward: prefix Example  @Controller public class MyController {
@RequestMapping(value = "test/{id}") public String handleTestRequest (@PathVariable("id") String id, Model model) { if (!id.matches("\\d+")) { model.addAttribute("msg", "id should only have digits"); return "error-page"; } else { return "forward:/testFinal/" + id + "?attr=attrVal"; } }
@RequestMapping("testFinal/{id}") public String handleRequestFinal (@PathVariable("id") String id, @RequestParam("attr") String attr, Model model) {
model.addAttribute("id", id); model.addAttribute("attr", attr); return "my-page"; }
@RequestMapping(value = "test2/{id}") public String handleTestRequest2 (@PathVariable("id") String id, Model model, HttpServletRequest request) { if (!id.matches("\\d+")) { model.addAttribute("msg", "id should only have digits"); return "error-page"; } else {
request.setAttribute("attr", "attrVal"); return "forward:/testFinal2/" + id; } }
@RequestMapping("testFinal2/{id}") public String handleRequestFinal2 (@PathVariable("id") String id, HttpServletRequest request, Model model) {
model.addAttribute("id", id); model.addAttribute("attr", request.getAttribute("attr")); return "my-page"; } }
Original Post
RedirectAttributes Example  @Controller public class MyController {
@RequestMapping(value = "test/{id}") public String handleTestRequest (@PathVariable("id") String id, Model model, RedirectAttributes ra) { if (!id.matches("\\d+")) { model.addAttribute("msg", "id should only have digits"); return "error-page"; } else { ra.addAttribute("attr", "attrVal"); ra.addFlashAttribute("flashAttr", "flashAttrVal"); return "redirect:/test2/{id}"; } }
@RequestMapping("test2/{id}") public String handleRequest (@PathVariable("id") String id, @RequestParam("attr") String attr, @ModelAttribute("flashAttr") String flashAttr, Model model) {
model.addAttribute("id", id); model.addAttribute("attr", attr); model.addAttribute("flashAttr", flashAttr+""); return "my-page"; } }
Original Post
 import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest;
import java.io.BufferedWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths;
@Controller @RequestMapping("/upload") public class FileUploadController {
@RequestMapping(method = RequestMethod.GET) public String handleGetRequest () { return "file-upload"; }
@RequestMapping(method = RequestMethod.POST) public String handlePostRequest (MultipartHttpServletRequest request, Model model) throws IOException {
MultipartFile multipartFile = request.getFile("user-file");
String name = multipartFile.getOriginalFilename(); BufferedWriter w = Files.newBufferedWriter(Paths.get("d:/filesUploaded/" + name)); w.write(new String(multipartFile.getBytes())); w.flush();
model.addAttribute("msg", "File has been uploaded: "+name); return "response"; }
}
 import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.bind.support.SessionStatus;
import javax.servlet.http.HttpServletRequest;
@Controller @SessionAttributes("visitor") @RequestMapping public class TradeController {
@RequestMapping("/trades/**") public String handleRequestById (@ModelAttribute("visitor") Visitor visitor, Model model, HttpServletRequest request, SessionStatus sessionStatus) {
model.addAttribute("msg", "trades request, serving page " + request.getRequestURI()); if (request.getRequestURI() .endsWith("clear")) { sessionStatus.setComplete(); return "clear-page"; } else { visitor.addPageVisited(request.getRequestURI()); return "traders-page"; } }
@ModelAttribute("visitor") public Visitor getVisitor (HttpServletRequest request) { return new Visitor(request.getRemoteAddr()); } }
Original Post
 @Controller public class AppController {
@Autowired private UserService userService;
@RequestMapping(value = "login", method = RequestMethod.GET) public String handleLoginGetRequest () { return "user-login"; }
@RequestMapping(value = "login", method = RequestMethod.POST) public String handleLoginPostRequest (User user, Model model, HttpServletRequest request) {
User loggedUser = userService.loginUser(user); if (loggedUser != null) { request.getSession(true) .setAttribute("user", loggedUser); return "redirect:/app/main-page"; } else { model.addAttribute("error", "Not a valid user"); return "user-login"; } }
@RequestMapping(value = "app/**", method = RequestMethod.GET) public String handleAppRequest (Model model, HttpServletRequest request) { model.addAttribute("uri", request.getRequestURI()); model.addAttribute("user", request.getAttribute("user")); return "app-page"; } }
Original Post
Asynchronous processing using Callable Example:  @Controller public class MyController { Logger logger = Logger.getLogger(MyController.class.getSimpleName());
@RequestMapping("test") public @ResponseBody Callable<String> handleTestRequest () { logger.info("handler started"); Callable<String> callable = new Callable<String>() { @Override public String call () throws Exception { logger.info("async task started"); Thread.sleep(2000); logger.info("async task finished"); return "async result"; } };
logger.info("handler finished"); return callable; } }
Original Post
Asynchronous processing using DeferredResult Example:  @Controller public class MyController { Logger logger = Logger.getLogger(MyController.class.getSimpleName());
@RequestMapping("test") public @ResponseBody DeferredResult<String> handleTestRequest () {
logger.info("handler started"); final DeferredResult<String> deferredResult = new DeferredResult<>();
new Thread(() -> { logger.info("async task started"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } logger.info("async task finished"); deferredResult.setResult("test async result"); }).start();
logger.info("handler finished"); return deferredResult; } }
Original Post
Using Locale as handler parameter.  package com.logicbig.example;
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod;
import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map;
@Controller public class TheController {
@RequestMapping(value = "/", method = {RequestMethod.POST, RequestMethod.GET}) public String handleGet (Model model, Locale locale) {
FormData formData = new FormData(); formData.setLocaleCode(locale.toString()); model.addAttribute("formData", formData);
Map<String, String> localeChoices = new LinkedHashMap<>(); Locale l = Locale.US; localeChoices.put(l.toString(), l.getDisplayLanguage()); l = Locale.GERMANY; localeChoices.put(l.toString(), l.getDisplayLanguage()); l = Locale.FRANCE; localeChoices.put(l.toString(), l.getDisplayLanguage()); model.addAttribute("localeChoices", localeChoices);
return "main"; }
@RequestMapping(value = "/page1") public String handlePage1 () { return "page1"; }
@RequestMapping(value = "/page2") public String handlePage2 () { return "page2"; }
public static class FormData { private String localeCode;
public String getLocaleCode () { return localeCode; }
public void setLocaleCode (String localeCode) { this.localeCode = localeCode; } } }
Original Post
Using Locale and ZoneId as handler parameters.  @RequestMapping("/") @ResponseBody public String testHandler (Locale clientLocale, ZoneId clientZoneId) {
ZoneOffset serverZoneOffset = ZoneOffset.ofTotalSeconds( TimeZone.getDefault().getRawOffset() / 1000);
return String.format("client timeZone: %s" + "<br/> " + "server timeZone: %s" + "<br/>" + " locale: %s%n", clientZoneId.normalized().getId(), serverZoneOffset.getId(), clientLocale); }
Original Post
Using javax.servlet.http.Part as handler parameter to hand file uploading:  import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestPart; import javax.servlet.http.Part; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption;
@Controller @RequestMapping("/upload") public class FileUploadController { public static final String TargetFolder = "d:/filesUploaded/";
@GetMapping public String handleGetRequest() { return "file-upload"; }
@PostMapping public String handlePostRequest(@RequestPart("user-file") Part part, Model model) throws IOException {
String name = extractFileName(part); InputStream inputStream = part.getInputStream(); Files.copy(inputStream, Paths.get(TargetFolder + name), StandardCopyOption.REPLACE_EXISTING); model.addAttribute("msg", "File has been uploaded: " + name); return "response"; }
private String extractFileName(Part part) { String disposition = part.getHeader("Content-Disposition"); String fileName = disposition .replaceFirst("(?i)^.*filename=\"?([^\"]+)\"?.*$", "$1"); return fileName; } }
Using HttpSession as handler method argument:  @Controller @ResponseBody public class MyController {
@RequestMapping("/") public String test1(HttpSession httpSession) { String sessionKey = "firstAccessTime"; Object time = httpSession.getAttribute(sessionKey); if (time == null) { time = LocalDateTime.now(); httpSession.setAttribute(sessionKey, time); } return "first access time : " + time; } }
|
|