Unterschied zwischen @RequestParam und @PathVariable in Spring MVC

@RequestParam und @PathVariable

@RequestParam Und @PathVariable Anmerkungen werden für den Zugriff auf die Werte aus der Anfrage verwendet. Beide Anmerkungen haben den wesentlichen Zweck bzw. Nutzen. Der Hauptunterschied zwischen @RequestParam Und @PathVariable ist, dass @RequestParam für den Zugriff auf die Werte der Abfrageparameter verwendet wird, während @PathVariable für den Zugriff auf die Werte aus der URI-Vorlage verwendet wird.

In diesem Tutorial erkläre ich die in Spring MVC verwendeten Annotationen @RequestParam und @PathVariable anhand eines einfachen Beispiels und der Syntax für den Zugriff auf die Werte aus der Abfragezeichenfolge und der URI-Vorlage.

@RequestParam vs @PathVariable Tutorial

@RequestParam vs @PathVariable Tutorial

@RequestParam

@RequestParam Annotation, die für den Zugriff auf die Abfrageparameterwerte aus der Anfrage verwendet wird. Sehen Sie sich die folgende Anforderungs-URL an:

http://localhost:8080/springmvc/hello/101?param1=10¶m2=20

In der obigen URL-Anfrage sind die Werte für param1 Und param2 kann wie folgt abgerufen werden:

public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}

Im Folgenden finden Sie die Liste der von unterstützten Parameter @RequestParam Anmerkung:

  • Standardwert – Dies ist der Standardwert als Fallback-Mechanismus, wenn die Anfrage diesen Wert nicht hat oder leer ist.
  • Name – Name des zu bindenden Parameters
  • erforderlich – Ob der Parameter obligatorisch ist oder nicht. Wenn dies wahr ist, schlägt das Versäumnis, diesen Parameter zu senden, fehl.
  • Wert – Dies ist ein Alias ​​für die name Attribut

@PathVariable

@PathVariable Identifiziert das Muster, das im URI für die eingehende Anforderung verwendet wird. Schauen wir uns die folgende Anfrage-URL an:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

Die obige URL-Anfrage kann wie folgt in Ihr Spring MVC geschrieben werden:

@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
.......
}

Der @PathVariable Anmerkung hat nur ein Attribut value zum Binden der Anforderungs-URI-Vorlage. Es ist erlaubt, das Mehrfache zu verwenden @PathVariable Anmerkung in der Einzelmethode. Stellen Sie jedoch sicher, dass nicht mehr als eine Methode dasselbe Muster aufweist.

Bei der Entwicklung von RESTful-Webdiensten wird es nützlich sein, diese Annotation zur Bildung des flexibleren URI zu verwenden (lesen Sie auch: Best Practices für die REST-API).

@PathParam vs. @QueryParam

Wenn Sie den Unterschied zwischen @PathParam und @QueryParam verstehen möchten, sind die beiden oben genannten Annotationen in JAX-RS-Implementierungen für den genauen Zweck von @PathVariable und @RequestParam definiert, der in den REST-Implementierungen von Spring definiert ist. Sie können jedoch jede der Anmerkungen verwenden, ohne dass sich das Verhalten ändert.

RequestParam vs. PathVariable-Beispiel

Unterschied zwischen @RequestParam und @PathVariable in Spring MVC

RequestParam vs. PathVariable

Hier ist der vollständige Quellcode für das Beispiel, der den Hauptunterschied zwischen RequestParam- und PathVariable-Annotationen demonstriert. Ich habe Spring Boot zum Schreiben dieser Beispielanwendung verwendet. Wenn Sie der Meinung sind, dass ich wichtige Punkte zu RequestParam und PathVariable übersehen habe, schreiben Sie dies bitte in den Kommentarbereich.

SpringMVCController.java

package net.javabeat.spring.boot.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class SpringMVCController {
@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
System.out.println("ID : " + id);
System.out.println("Param 1 : " + param1);
System.out.println("Param 2 : " + param2);
return "hello";
}
}

Anwendung.java

package net.javabeat.spring.boot.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
public class Application extends WebMvcConfigurerAdapter{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

WebMvcConfig.java

package net.javabeat.spring.boot.example.controller;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter{
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}

@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("WEB-INF/");
resolver.setSuffix(".jsp");
return resolver;
}
}

application.properties

server.contextPath=/springmvc

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.javabeat</groupId>
<artifactId>boot</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>boot</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>boot</finalName>
</build>
</project>

Wenn Sie nicht wissen, wie Sie diese Anwendung ausführen, lesen Sie bitte unser Spring-Boot-Tutorial, um zu verstehen, wie Sie eine Spring-Boot-Anwendung ausführen.

Laden Sie den Quellcode herunter

Symbol

Quellcode: Unterschied zwischen @RequestParam und @PathVariable

1 Datei(en) 4,30 KB Download

Zusammenfassung

Dieses Tutorial hätte Ihnen geholfen, den Unterschied zwischen @PathVariable und @RequestParam in der Spring MVC zu verstehen. Außerdem habe ich die alternativen Annotationen @PathParam und @QueryParam erläutert, die in den offiziellen JAX-RS-Implementierungen unterstützt werden. Wenn Sie Fragen haben, schreiben Sie diese bitte in den Kommentarbereich.

Vielen Dank, dass Sie meinen Blog gelesen haben. Fröhliches Lesen!!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen