Оглавление
Редактировать передачу нескольких параметров
Переименование параметров серверной части
@RequestBody получает объект JSON
Получите параметр @PathVariable в URL-адресе.
Несколько способов получить каталог проекта:
Получить файл cookie/сеанс/заголовок
Получить файл cookie @CookieValue
Что такое Spring MVC?
Spring Web MVC — это оригинальная веб-платформа, построенная на API сервлетов и включенная в среду Spring с самого начала. Официальное название «Spring Web MVC» происходит от названия его исходного модуля (spring-webmvc), но более распространенное имя — «Spring MVC».
Из приведенного выше определения мы можем вывести два ключевых сообщения:
1. Spring MVC — это веб-фреймворк.
2. Spring MVC построен на основе API сервлетов.
Введение в MVC
SpringMVC — это облегченная веб-платформа на основе Java, управляемая запросами и реализующая модель проектирования MVC. Это последующий продукт Spring FrameWork, интегрированный в Spring Web Flow. Платформа Spring предоставляет полнофункциональные модули MVC для создания веб-приложений. Используя подключаемую архитектуру MVC Spring, при использовании Spring для веб-разработки вы можете использовать среду Spring MVC Spring или интегрировать другие среды разработки MVC.
SpringMVC стал одной из самых популярных платформ MVC, а с выпуском Spring 3.0 он стал лучшей платформой MVC.
Общие аннотации в SpringMVC
@RequestMapping
@RequestMapping — одна из наиболее часто используемых аннотаций в веб-приложениях Spring. Она используется для регистрации сопоставления маршрутов интерфейса.
Сопоставление маршрутов. Так называемое сопоставление маршрутов означает, что когда пользователь обращается к URL-адресу, процесс сопоставления запроса пользователя с методом определенного класса в программе называется сопоставлением маршрутов.
Основное использование @RequestMapping:
@Controller
@RequestMapping("/p")
public class PersonController {
@RequestMapping("/index")
public Object index(Person person) {
// 获取参数
System.out.println(person.getName() + ":" +
person.getPassword());
return "/index.html";
}
}
@RequestMapping может изменять классы или методы. При изменении классов и методов адрес доступа — класс + метод. @RequestMapping также может напрямую изменять метод.Реализация кода выглядит следующим образом:
@Controller
@ResponseBody // 定义返回的数据格式为⾮视图(text/html)
public class UserController {
@RequestMapping("/hi")
public String sayHi(){
return "<h1>Hi,Spring MVC.</h1>";
}
}
Укажите тип метода GET/POST
Мы можем явно указать @RequestMapping для получения POST, как показано ниже:
@Controller
@ResponseBody // 定义返回的数据格式为⾮⻚⾯
public class UserController {
@RequestMapping(value = "/hi",method= RequestMethod.POST)
public String sayHi(){
return "<h1>Hi,Spring MVC.</h1>";
}
}
@GetMapping и PostMapping
Три способа написания запросов на получение:
// 写法1
@RequestMapping("/index")
// 写法2
@RequestMapping(value = "/index",method = RequestMethod.GET)
// 写法3
@GetMapping("/index")
Есть два способа написать запросы на публикацию:
// 写法1
@RequestMapping(value = "/index",method = RequestMethod.POST)
// 写法2
@PostMapping("/index")
Получить параметры
Передать один параметр
В Spring MVC вы можете напрямую использовать параметры метода для передачи параметров, например следующий код:
@Controller
@ResponseBody // 定义返回的数据格式为⾮⻚⾯
public class UserController {
@RequestMapping("/name")
public Object method_1(String name){
System.out.println("参数 name:"+name);
return name;
}
}
Результаты, доступные в браузере:
Результаты, полученные в идее:
Передать объект
А Spring MVC может автоматически реализовывать назначение объектов параметров, таких как объекты Person:
import lombok.Data;
@Data
public class Person {
private String name;
private String password;
}
Передайте реализацию объектного кода:
@RequestMapping("/person")
public Object method_2(Person p){
System.out.println("对象中的 name:"+p.getName());
System.out.println("对象中的 password:"+p.getPassword());
return p.getName()+":"+p.getPassword();
}
Результаты, доступные в браузере:
Результаты, полученные в идее:
Передать несколько параметров
@RequestMapping("/many")
public Object method_3(String name, String pwd) {
System.out.println("name 参数:" + name);
System.out.println("pwd 参数:" + pwd);
return name+" "+pwd;
}
Результаты, доступные в браузере:
При наличии нескольких параметров, когда параметры внешнего и внутреннего интерфейса совпадают, они совпадают по имени параметра. Следовательно, позиция параметра не влияет на результат получения параметра серверной частью.
Переименование параметров серверной части
В некоторых особых случаях ключ параметра, передаваемый внешним интерфейсом, может не соответствовать ключу, полученному нашим серверным интерфейсом. Например, внешний интерфейс передает время серверной части, а серверная часть имеет поле createtime для его получения. , так что это произойдет. Если параметры не могут быть получены, если это произойдет, мы можем использовать @RequestParam для переименования значений параметров передней и задней частей.
Код реализации бэкэнда:
@RequestMapping("/createtime")
public Object method_4(@RequestParam("time") String createtime) {
System.out.println("时间:" + createtime);
return createtime;
}
Результаты внешнего доступа:
@RequestParam
В приведенном выше примере, если мы передадим во внешний интерфейс невременной параметр, программа сообщит об ошибке, как показано на следующем рисунке:
Это связано с тем, что серверная часть заявила, что внешний интерфейс должен передать параметр времени, но внешний интерфейс не передает его серверной части. Мы можем найти подсказки, просмотрев детали реализации аннотации @RequestParam.Аннотация реализована как следует:
требуется: означает «необходимо». Значение по умолчанию — «истина». Если параметры не переданы, будет сообщено об ошибке.
Мы можем избежать сообщения об ошибке без ее передачи, установив требуемый = false в @RequestParam. Конкретная реализация выглядит следующим образом:
@RequestMapping("/createtime")
public Object method_4(@RequestParam(value = "time",required = false) String createtime) {
System.out.println("时间:" + createtime);
return createtime;
}
@RequestBody получает объект JSON
Серверный код:
@RequestMapping(value = "/m5", method = RequestMethod.POST)
public Object method_5(@RequestBody Person person) {
System.out.println("Person:" + person);
return true;
}
Здесь почтальон используется для создания json-запроса:
Получите параметр @PathVariable в URL-адресе.
Серверный код:
@PostMapping("/m6/{name}/{password}")
public Object method_6(@PathVariable String name, @PathVariable String password) {
System.out.println("name:" + name);
System.out.println("password:" + password);
return true;
}
Адрес внешнего метода:
Примечание. {имя} и {пароль} обязательны.
Загрузить файл @RequestPart
@RequestMapping("/param")
public String param(String name, @RequestPart("myfile") MultipartFile file) throws IOException {
// 获取⽂件后缀名
String fileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
// ⽂件保存地址
String filePath = ClassUtils.getDefaultClassLoader().getResource("static").getPath() +
"/" + UUID.randomUUID() + fileName;
// 保存⽂件
file.transferTo(new File(filePath));
return filePath + " 上传成功.";
}
Несколько способов получить каталог проекта:
ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX).getPath();
new ClassPathResource("").getFile().getAbsolutePath();
ClassUtils.getDefaultClassLoader().getResource("").getPath();
ResourceUtils.getFile("classpath:static/").getPath();
Получить файл cookie/сеанс/заголовок
Получить файл cookie @CookieValue
@RequestMapping("/cookie")
@ResponseBody
public String cookie(@CookieValue("bite") String bite) {
return "cookie:" + bite;
}
GetHeader @RequestHeader
@RequestMapping("/header")
@ResponseBody
public String header(@RequestHeader("User-Agent") String userAgent) {
return "userAgent:"+userAgent;
}
Хранение и извлечение сеансов
Хранилище сеансов аналогично сервлету и получается с помощью HttpServletRequest, как показано в следующем коде:
@RequestMapping("/setsess")
@ResponseBody
public String setsess(HttpServletRequest request) {
// 获取 HttpSession 对象,参数设置为 true 表示如果没有 session 对象就创建⼀个session
HttpSession session = request.getSession(true);
if(session!=null){
session.setAttribute("username","java");
}
return "session 存储成功";
}
Вы можете использовать HttpServletRequest для чтения сеанса, как показано в следующем коде:
@RequestMapping("/sess")
@ResponseBody
public String sess(HttpServletRequest request) {
// 如果 session 不存在,不会⾃动创建
HttpSession session = request.getSession(false);
String username = "暂⽆";
if(session!=null && session.getAttribute("username")!=null){
username = (String) session.getAttribute("username");
}
return "username:"+username;
}
Более простой способ получить сессию:
@RequestMapping("/sess2")
@ResponseBody
public String sess2(@SessionAttribute(value = "username",required = false) String username{
return "username:"+username;
}