Brotar varias formas de obtener los parámetros

  • solicitud de datos al método de controlador de enlace de datos siguiente de parámetros se utiliza y qué circunstancias el uso de anotaciones;

resumen:

método de controlador utiliza comúnmente parámetro anotaciones de enlace, se dividió según la parte del contenido de la solicitud de las cuatro categorías que se ocupan principalmente de tipo común :()

A, la solicitud de sección de procesamiento de uri (plantilla uri denomina en este documento como la variable, excluyendo porción queryString) anotación: @PathVariable ;
B, parte de la cabecera de la solicitud proceso de anotación: @RequestHeader , @CookieValue ;
C, la porción de cuerpo de la petición de procesamiento de anotación: @ RequestParam, @RequestBody ;
D, proceso del tipo de anotaciones de atributos: @SessionAttributes, @ModelAttribute;

1, @PathVariable

Cuando se utiliza la asignación de estilo plantilla @RequestMapping URI, es decir someUrl / {Paramid}, en este momento puede ser limitado por las anotaciones @Pathvariable Paramid sobre valores de los parámetros de proceso para pasar por encima de ella.
Código de ejemplo:

@Controller  
@RequestMapping("/owners/{ownerId}")  
public class RelativePathUriTemplateController {  
  
  @RequestMapping("/pets/{petId}")  
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      
    // implementation omitted  
  }  
}

El código anterior y los valores de las variables petId ID_PROPIETARIO la plantilla URI, unido a los parámetros del método. Si el nombre de la variable de plantilla URI y el nombre de los parámetros del método no necesitan unirse, es necesario especificar la plantilla uri nombre en el @PathVariable ( "nombre").

2, @ RequestHeader, @ CookieValue

anotaciones @RequestHeader pueden solicitar porción de solicitud de encabezado valor unido a los parámetros del método.

Código de ejemplo:

Esta es la parte de cabecera de una solicitud:

Host                    localhost:8080  
Accept                  text/html,application/xhtml+xml,application/xml;q=0.9  
Accept-Language         fr,en-gb;q=0.7,en;q=0.3  
Accept-Encoding         gzip,deflate  
Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7  
Keep-Alive              300  
@RequestMapping("/displayHeaderInfo.do")  
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,  
                              @RequestHeader("Keep-Alive") long keepAlive)  {  
  
  //...  
  
}  

El código anterior, el valor del valor Accept-Encoding porción de solicitud de cabecera, unido a los parámetros de codificación, y Keep-Alive cabecera se une al parámetro keepAlive.

@CookieValue puede solicitar valor de la cabecera de la cookie con destino a los parámetros del método.

valor de la cookie, por ejemplo, la siguiente:
JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
el código de parámetro de unión:

@RequestMapping("/displayHeaderInfo.do")  
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie)  {  
  
  //...  
  
}  

Que está enlazado con el valor del parámetro JSESSIONID galleta.

3, @ RequestParam, @RequestBody

@RequestParam

A) utilizada para procesar el tipo simple de la unión, por request.getParameter () de cuerda obtenidas se pueden convertir directamente al caso de un tipo simple (String> tipos simples de operación de conmutación realizado por la configuración de la ConversionService convertidor); para una solicitud de uso .getParameter () parámetros de adquisición modo, es posible obtener el valor procesado queryString realización, la realización puede ser post valor procesado de los datos del cuerpo;

B) para el procesamiento de Content-Type: contenido urlencoded-x-www-formulario de solicitud / GET presentación codificada, POST;

C) La anotación tiene dos atributos: valor, necesario; valor especifica el valor de ID se pasa al nombre, requerido para indicar si el parámetro debe ser unido;
Código de ejemplo:

@Controller  
@RequestMapping("/pets")  
@SessionAttributes("pet")  
public class EditPetForm {  
  
    // ...  
  
    @RequestMapping(method = RequestMethod.GET)  
    public String setupForm(@RequestParam("petId") int petId, ModelMap model) {  
        Pet pet = this.clinic.loadPet(petId);  
        model.addAttribute("pet", pet);  
        return "petForm";  
    }  
  
    // ... 

@RequestBody

El proceso de anotación utiliza para Content-Type: no application / x-www-form-urlencoded codificación de contenido, por ejemplo application / json, application / xml similares;

Es para resolver el cuerpo de datos de post configurado mediante el uso de HttpMessageConverters HandlerAdapter, y luego ligado al bean apropiado.

Debido FormHttpMessageConverter dispuesto, así que puede ser utilizada para procesar el contenido de / x-www-form-urlencoded resultados de la aplicación procesados ​​se colocan en un MultiValueMap <String, String> Cuando, en este caso el uso de ciertos requisitos especiales, detalles api Ver FormHttpMessageConverter;

Código de ejemplo:

@RequestMapping(value = "/something", method = RequestMethod.PUT)  
public void handle(@RequestBody String body, Writer writer) throws IOException {  
  writer.write(body);  
}  

4, @ SessionAttributes, @ModelAttribute

@SessionAttributes:

La anotación del valor de atributo de los enlaces objeto HttpSession, fácil de usar en los parámetros del proceso en.
Las notas tienen valor, tipos dos propiedades, puede especificar un objeto de atributos para ser utilizado por nombre y tipo;

Código de ejemplo:

@Controller  
@RequestMapping("/editPet.do")  
@SessionAttributes("pet")  
public class EditPetForm {  
    // ...  
}  

@ModelAttribute

La anotación tiene dos usos, un método para el uno para el parámetro;

Cuando se utiliza en un método: antes de procesar @RequestMapping utiliza generalmente, necesidad enlace de modelos, solicitud del fondo;

Cuando los parámetros utilizados: por nombre a una correspondiente, se une el valor correspondiente al nombre de frijol anotación parámetro; valores en obligarse a partir de:

En A) @SessionAttributes habilitadas objeto de atributo;

B) @ModelAttribute modelo de objetos para especificado cuando el método;

C) por encima de dos casos son a veces no, objetos un nuevo nuevo bean a ser atado, y la solicitud por su nombre en una manera correspondiente a enlazar los valores al bean.

@ModelAttribute código de ejemplo utilizado en los métodos de:

// Add one attribute  
// The return value of the method is added to the model under the name "account"  
// You can customize the name via @ModelAttribute("myAccount")  
  
@ModelAttribute  
public Account addAccount(@RequestParam String number) {  
    return accountManager.findAccount(number);  
}  

El efecto real de este enfoque es la invocación del método antes de @RequestMapping, modelo para poner el objeto de la solicitud ( "cuenta", cuenta);

@ModelAttribute código de ejemplo utilizada en los parámetros:

@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)  
public String processSubmit(@ModelAttribute Pet pet) {  
     
}  

La primera consulta el Pet objetos @SessionAttributes si la unión de, si no la consulta de si el @ModelAttribute nivel método vinculado objetos para mascotas, si no hay valor será plantilla URI de acuerdo con el nombre correspondiente del objeto unido al animal doméstico de cada atributo .

Publicado 53 artículos originales · alabanza ganado 13 · vistas 2267

Supongo que te gusta

Origin blog.csdn.net/qq_36821220/article/details/103295103
Recomendado
Clasificación