如何通过 spring 引导中的 POST 方法读取 url 中的参数
How to read a parameter in url coming via POST method in spring boot
该应用程序需要 driver 及其位置进行注册。有两个api,一个用来注册driver,一个用来保存位置。
api 是
POST /api/v1/driver/register/
POST /api/v1/driver/:id/sendLocation/
第一个api会请求,响应结构如下
要求:
{
"name": "Rakesh123",
"email":"rakesh@abc1.com",
"phone_number":9876899979,
"license_number":"DL12CDRWG1",
"car_number":"DL1T43241"
}
响应:
{
"driverId": 2,
"name": "Rakesh123",
"email": "rakesh@abc1.com",
"phone_number": "9876899979",
"license_number": "DL12CDRWG1",
"car_number": "DL1T43241",
"location": null
}
在第二个 api 中,":id" 将是收到的 driver id 并包含带有纬度和经度的请求正文
要求:
{
"latitude": 12.972442,
"longitude": 77.580643
}
我在从请求中读取“:id”参数时遇到问题。我尝试打印请求 URI 值,这就是请求的来源
/api/v1/driver/$id/sendLocation/
写法如下
1.
@PostMapping("/register")
public ResponseEntity<?> registerDriver(@RequestBody DriverDetails driver){
responseMap = new HashMap<>();
try {
DriverDetails registeredDriver = service.registerDriver(driver);
responseMap.put("driver", registeredDriver);
responseEntity = new ResponseEntity<>(responseMap, HttpStatus.CREATED);
}catch(Exception e) {
responseMap.put("status", "failure");
responseMap.put("reason", e.getMessage());
responseEntity = new ResponseEntity<>(responseMap, HttpStatus.BAD_REQUEST);
}
return responseEntity;
}
@PostMapping("/{id}/sendLocation")
public ResponseEntity<?> saveDriverLocation(@PathVariable String id, @RequestBody Location location){
responseMap = new HashMap<>();
try {
service.addLocation(Integer.parseInt(id), location);
responseMap.put("status", "success");
responseEntity = new ResponseEntity<>(responseMap, HttpStatus.ACCEPTED);
}catch(Exception e) {
responseMap.put("status", "failure");
responseMap.put("reason", e.getMessage());
responseEntity = new ResponseEntity<>(responseMap, HttpStatus.BAD_REQUEST);
}
return responseEntity;
}
感谢帮助
我觉得你的代码没问题。也许是发送请求的客户端有问题?它真的包含 URL 中的 Id 值吗?
这里有一个 spring 启动的小例子,它读取 Id 并打印到控制台:
DemoApplication.java
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
ExampleController.java
@RestController
@RequestMapping("/api/v1/driver")
public class ExampleController {
/**
* Call this Endpoint with e.g. http://localhost:8080/api/v1/driver/123/sendLocation
*/
@PostMapping("/{id}/sendLocation")
public ResponseEntity saveDriverLocation(@PathVariable String id, @RequestBody String location) {
System.out.println("received id: " + id);
System.out.println("received location: "+ location);
return ResponseEntity.ok().build();
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
该应用程序需要 driver 及其位置进行注册。有两个api,一个用来注册driver,一个用来保存位置。
api 是
POST /api/v1/driver/register/
POST /api/v1/driver/:id/sendLocation/
第一个api会请求,响应结构如下
要求:
{
"name": "Rakesh123",
"email":"rakesh@abc1.com",
"phone_number":9876899979,
"license_number":"DL12CDRWG1",
"car_number":"DL1T43241"
}
响应:
{
"driverId": 2,
"name": "Rakesh123",
"email": "rakesh@abc1.com",
"phone_number": "9876899979",
"license_number": "DL12CDRWG1",
"car_number": "DL1T43241",
"location": null
}
在第二个 api 中,":id" 将是收到的 driver id 并包含带有纬度和经度的请求正文
要求:
{
"latitude": 12.972442,
"longitude": 77.580643
}
我在从请求中读取“:id”参数时遇到问题。我尝试打印请求 URI 值,这就是请求的来源
/api/v1/driver/$id/sendLocation/
写法如下
1.
@PostMapping("/register")
public ResponseEntity<?> registerDriver(@RequestBody DriverDetails driver){
responseMap = new HashMap<>();
try {
DriverDetails registeredDriver = service.registerDriver(driver);
responseMap.put("driver", registeredDriver);
responseEntity = new ResponseEntity<>(responseMap, HttpStatus.CREATED);
}catch(Exception e) {
responseMap.put("status", "failure");
responseMap.put("reason", e.getMessage());
responseEntity = new ResponseEntity<>(responseMap, HttpStatus.BAD_REQUEST);
}
return responseEntity;
}
@PostMapping("/{id}/sendLocation")
public ResponseEntity<?> saveDriverLocation(@PathVariable String id, @RequestBody Location location){
responseMap = new HashMap<>();
try {
service.addLocation(Integer.parseInt(id), location);
responseMap.put("status", "success");
responseEntity = new ResponseEntity<>(responseMap, HttpStatus.ACCEPTED);
}catch(Exception e) {
responseMap.put("status", "failure");
responseMap.put("reason", e.getMessage());
responseEntity = new ResponseEntity<>(responseMap, HttpStatus.BAD_REQUEST);
}
return responseEntity;
}
感谢帮助
我觉得你的代码没问题。也许是发送请求的客户端有问题?它真的包含 URL 中的 Id 值吗?
这里有一个 spring 启动的小例子,它读取 Id 并打印到控制台:
DemoApplication.java
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
ExampleController.java
@RestController
@RequestMapping("/api/v1/driver")
public class ExampleController {
/**
* Call this Endpoint with e.g. http://localhost:8080/api/v1/driver/123/sendLocation
*/
@PostMapping("/{id}/sendLocation")
public ResponseEntity saveDriverLocation(@PathVariable String id, @RequestBody String location) {
System.out.println("received id: " + id);
System.out.println("received location: "+ location);
return ResponseEntity.ok().build();
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>