Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Por qué utilizar Modelo en lugar de solicitud para obtener parámetros de método en el controlador Spring-mvc?

¿Por qué utilizar Modelo en lugar de solicitud para obtener parámetros de método en el controlador Spring-mvc?

1. @PathVariable

Cuando se utiliza la asignación de estilo de plantilla URI @RequestMapping (es decir, someUrl/{paramId}), paramId se puede vincular al valor del parámetro del método mediante la anotación @Pathvariable.

Código de muestra:

@Controller

@RequestMapping("/owners/{ownerId}")

clase pública RelativePathUriTemplateController {

@RequestMapping("/owners/{ownerId}")

Clase pública RelativePathUriTemplateController {

@RequestMapping("/pets/{petId}")

public void findPet(@PathVariable String propietarioId, @PathVariable String petId, Modelo modelo) {

// Implementación omitida

}

}

}

El código anterior vincula los valores de las variables propietarioId y petId en la plantilla URI a los parámetros del método. Si el nombre del parámetro del método no coincide con el nombre de la variable que se vinculará en la plantilla de URI, debe especificar el nombre en la plantilla de URI en @PathVariable ("nombre").

2.@RequestHeader, @CookieValue

La anotación @RequestHeader vincula el valor de la parte del encabezado de la solicitud a los parámetros del método.

Código de muestra:

Esta es la parte del encabezado de la solicitud:

Host localhost: 8080

Aceptar texto/html, aplicación /xhtml xml, aplicación/xml; q= 0.9

Aceptar-Idioma fr, en-gb; q=0.7, en; q=0.3

Aceptar-Codificación gzip, deflate

Aceptar-conjunto de caracteres ISO-8859-1, utf-8; q=0.7, *; q= 0.7

Keep-Alive 300

@RequestMapping(" /displayHeaderInfo .do")

public void displayHeaderInfo(@RequestHeader("Accept-Encoding") Codificación de cadena,

@RequestHeader("Keep-Alive") long keepAlive) {

}

El código anterior vincula el valor de codificación de aceptación en la parte del encabezado de la solicitud a la codificación del parámetro en la parte del encabezado de la solicitud, y vincula el valor de codificación de aceptación a la codificación del parámetro y el valor del encabezado Keep-Alive al enlace del parámetro keepAlive.

@CookieValue vincula el valor de la cookie en el encabezado de la solicitud al parámetro del método.

Por ejemplo, el valor de la cookie es el siguiente:

JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84

Código de enlace de parámetros:

@RequestMapping("/ displayHeaderInfo.do ")

public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie) {

}

public void displayHeaderInfo(@CookieValue(" JSESSIONID") String cookie) {

}

Es decir, vincular el valor de JSESSIONID al parámetro cookie.

3.@RequestParam, @RequestBody

@RequestParam

A) se usa a menudo para manejar enlaces de tipos simples y se puede usar directamente a través de Request.getParameter () Convierte String a un tipo simple (String --gt; la operación de conversión de tipo simple la completa el convertidor configurado por ConversionService debido al uso de request.getParameter(), Request.getParameter() puede convertir String a un tipo simple); En el caso de tipos simples (String --gt; la operación de conversión de tipos simples la completa el convertidor configurado por ConversionService). Método GetParameter() para obtener parámetros, por lo que puede usar el método get para procesar el valor de queryString, o puede usar el método post para procesar el valor de los datos del cuerpo.

B) Se usa para procesar Content-Type; : application/x-www -form-urlencoded y contenido enviado en modos GET y POST;

C) Las anotaciones tienen dos atributos: valor, el valor requerido se usa para especificar el nombre de identificación del valor; se pasa y requerido se usa para indicar si el parámetro es un parámetro.

requerido se utiliza para indicar si los parámetros deben estar vinculados

Código de muestra:

@Controller

@RequestMapping("/pets")

@SessionAttributes("pet")

clase pública EditPetForm {

@RequestMapping(método = RequestMethod.GET)

public String setupForm(@RequestParam( " petId") int petId, ModelMap modelo) {

Mascota mascota = this.clinic.loadPet(petId);

model.addAttribute("pet", mascota

return "petForm"

}

@RequestParam("petId") int petId.

@RequestBody

Esta anotación generalmente se usa para manejar contenido codificado con Content-Type: no aplicación/x-www-form-urlencoded, como aplicación/json, aplicación/xml, etc.;

Se realiza mediante usando HttpMessageConverters configurado con HandlerAdapter Configure para analizar el cuerpo de datos de la publicación y vincularlo al bean correspondiente.

Dado que FormHttpMessageConverter está configurado, también se puede utilizar para procesar el contenido codificado de la aplicación/x-www-form-urlen, y los resultados del procesamiento se colocarán en MultiValueMaplt; Esto se utiliza para algunas necesidades especiales, consulte API FormHttpMessageConverter.