Spring MVC - Estilo de reposo

REST(Transferencia de estado representacional)

  • Cuando queremos representar un recurso de red, podemos usar dos formas:
    usamos 查询id为1的用户信息y保存用户信息举例
  • Formulario de descripción de recursos de estilo tradicional
    • http://localhost/usuario/getById?id=1
    • http://localhost/usuario/guardarUsuario
  • Formulario de descripción de estilo REST
    • http://localhost/usuario/1
    • http://localhost/usuario

La comparación es obvia. En la forma tradicional, una url de solicitud corresponde a una operación. Esto no solo es problemático, sino también inseguro, porque podemos saber aproximadamente qué tipo de operación implementa la url leyendo la dirección de la url de la solicitud. En la descripción del estilo REST, la dirección de la solicitud se vuelve más simple y la función específica de la URL no se puede adivinar simplemente mirando la URL de la solicitud. En resumen, solo hay dos ventajas:

  • Ocultando el comportamiento de acceso al recurso, es imposible saber qué tipo de operación se realiza sobre el recurso a través de la dirección
  • simplificación de la escritura

Entonces tenemos un nuevo problema, la misma dirección URL se puede agregar, modificar o consultar, entonces, ¿cómo distinguimos cuál es la solicitud?

  • Úselo al acceder a los recursos en un estilo RESTComportamientoDistinguir qué operaciones se realizan sobre los recursos.
    • http://localhost/usersConsulta toda la información del usuario GET (consulta)
    • http://localhost/users/1Consultar información de usuario especificada GET (consulta)
    • http://localhost/usersAgregar información de usuario POST (agregar/guardar)
    • http://localhost/usersModificar información de usuario PUT (modificar/actualizar)
    • http://localhost/users/1Eliminar información de usuario DELETE (eliminar)

Hay muchas formas de solicitar, pero hay cuatro que se usan comúnmente, a saber GET: para consultar,: POSTpara agregar,: PUTpara modificar y DELETE: para eliminar.

PRECAUCIÓN PRECAUCIÓN PRECAUCIÓN PRECAUCIÓN PRECAUCIÓN

  • El comportamiento mencionado anteriormente es un método acordado, y el acuerdo no es una especificación y se puede romper, por lo que se denomina estilo REST, no especificación REST.
    • REST proporciona una arquitectura correspondiente. El diseño de proyectos de acuerdo con esta arquitectura puede reducir la complejidad del desarrollo y mejorar la escalabilidad del sistema.
    • REST estipula que GET/POST/PUT/DELETE tiene como objetivo la consulta/adición/modificación/eliminación, pero si tenemos que usar la solicitud GET para eliminar, esto se puede lograr ejecutando el programa
  • Pero si la mayoría de la gente sigue este estilo, el código que escriba será un poco desconcertante para que otros lo lean.
  • El nombre del módulo de descripción se suele describir en plural, es decir, en formato de añadir s, indicando dichos recursos en lugar de un único recurso, como por ejemplo: usuarios, libros, cuentas...

Ahora que sabemos qué es el estilo REST, ahora presentamos un nuevo concepto RESTful: el acceso a los recursos de acuerdo con el estilo REST se llamaSosegado

Compare la solicitud. Uno se coloca en la ruta URL de la página y el otro se modifica mediante el uso de algunos métodos de parámetros de solicitud.
inserte la descripción de la imagen aquí

nombre @PathVariable
tipo Anotación de parámetros formales
Ubicación Frente de definición de parámetros del método del controlador SpringMVC
efecto La relación entre los parámetros de la ruta de enlace y los parámetros del método del procesador requiere una correspondencia uno a uno entre los nombres de los parámetros de la ruta y los nombres de los parámetros formales.

Con respecto a los parámetros de recepción, tres anotaciones @RequestBody, @RequestParam,@PathVariable

  • la diferencia
    • @RequestParam se utiliza para recibir direcciones URL o parámetros de formulario
    • @RequestBody se usa para recibir datos json
    • @PathVariable se usa para recibir parámetros de ruta, use {parameter name} para describir parámetros de ruta
  • solicitud
    • En la última etapa de desarrollo, cuando se envía más de un parámetro de solicitud, el formato json es el formato principal y @RequestBody se usa ampliamente.
    • Si envía datos en formato que no sea json, use @RequestParam para recibir parámetros de solicitud
    • Use RESTful para el desarrollo. Cuando la cantidad de parámetros es pequeña, como 1, puede usar @PathVariable para recibir la variable de ruta de solicitud, que generalmente se usa para pasar el valor de identificación.

De hecho, nuestro desarrollo actual del estilo REST no es tan engorroso.Veamos un ejemplo y será obvio:

package com.taro.controller;

import com.taro.domain.Book;
import org.springframework.web.bind.annotation.*;

//@Controller
//@ResponseBody配置在类上可以简化配置,表示设置当前每个方法的返回值都作为响应体
//@ResponseBody
@RestController     //使用@RestController注解替换@Controller与@ResponseBody注解,简化书写
@RequestMapping("/books")
public class BookController {
    
    

//    @RequestMapping( method = RequestMethod.POST)
    @PostMapping        //使用@PostMapping简化Post请求方法对应的映射配置
    public String save(@RequestBody Book book){
    
    
        System.out.println("book save..." + book);
        return "{'module':'book save'}";
    }

//    @RequestMapping(value = "/{id}" ,method = RequestMethod.DELETE)
    @DeleteMapping("/{id}")     //使用@DeleteMapping简化DELETE请求方法对应的映射配置
    public String delete(@PathVariable Integer id){
    
    
        System.out.println("book delete..." + id);
        return "{'module':'book delete'}";
    }

//    @RequestMapping(method = RequestMethod.PUT)
    @PutMapping         //使用@PutMapping简化Put请求方法对应的映射配置
    public String update(@RequestBody Book book){
    
    
        System.out.println("book update..."+book);
        return "{'module':'book update'}";
    }

//    @RequestMapping(value = "/{id}" ,method = RequestMethod.GET)
    @GetMapping("/{id}")    //使用@GetMapping简化GET请求方法对应的映射配置
    public String getById(@PathVariable Integer id){
    
    
        System.out.println("book getById..."+id);
        return "{'module':'book getById'}";
    }

//    @RequestMapping(method = RequestMethod.GET)
    @GetMapping             //使用@GetMapping简化GET请求方法对应的映射配置
    public String getAll(){
    
    
        System.out.println("book getAll...");
        return "{'module':'book getAll'}";
    }
}

nombre @RestController
tipo anotación de clase
Ubicación Por encima de la definición de clase de controlador de desarrollo RESTful basado en SpringMVC
efecto Establezca la clase de controlador actual en estilo RESTful,
que es equivalente a la combinación de anotaciones @Controller y @ResponseBody
nombre @GetMapping @PostMapping @PutMapping @DeleteMapping
tipo anotación de método
Ubicación Desarrollo RESTful basado en SpringMVC por encima de la definición del método del controlador
efecto Establezca la ruta de acceso de solicitud del método de controlador actual y la acción de solicitud, cada una correspondiente a una acción de solicitud,
por ejemplo, @GetMapping corresponde a una solicitud GET
atributos relacionados valor (predeterminado): solicitud de ruta de acceso

Supongo que te gusta

Origin blog.csdn.net/weixin_45696320/article/details/130296315
Recomendado
Clasificación