Close

Spring MVC - @Controller Examples

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;
}
}




See Also