Общие аннотации и использование в SpringMVC

Оглавление

Что такое Spring MVC?

Введение в MVC

Общие аннотации в SpringMVC

@RequestMapping

Укажите тип метода GET/POST

@GetMapping и PostMapping

Получить параметры

Передать один параметр

Передать объект

Редактировать передачу нескольких параметров

Переименование параметров серверной части

Изменить @RequestParam

@RequestBody получает объект JSON

Получите параметр @PathVariable в URL-адресе.

Загрузить файл @RequestPart

Несколько способов получить каталог проекта:

Получить файл cookie/сеанс/заголовок

Получить файл cookie @CookieValue

GetHeader @RequestHeader

Хранение и извлечение сеансов


Что такое 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;
}

Supongo que te gusta

Origin blog.csdn.net/m0_62468521/article/details/131348464
Recomendado
Clasificación