springmvc中接受请求参数的方式(Path Variables,Request Parameters,Form Parameters,Request Body) get和post请求要注意什么!

在Spring MVC中,HTTP请求传参可以通过以下几种方式实现,其中GET和POST请求在传参方式上有一些区别,需要注意一些细节:

1. URL路径参数(Path Variables):

可以将参数直接嵌入到请求的URL路径中,例如rest风格 `/users/{id}`,Spring MVC会将URL中的参数提取出来并传递给相应的处理方法。

**案例:GET请求传递参数**

假设我们有一个简单的控制器来处理用户信息:

```java

@Controller
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        // 根据用户ID查询用户信息
        User user = userService.getUserById(id);
        return ResponseEntity.ok(user);
    }
}


```

```java

@Controller
public class UserController {

    @GetMapping("/users")
    public ResponseEntity<User> getUserById(Long id) {
        // 根据用户ID查询用户信息
        User user = userService.getUserById(id);
        return ResponseEntity.ok(user);
    }
}


```

在上述示例中,`@PathVariable`注解用于从URL路径中提取`id`参数,这是一种GET请求传递参数的方式。

2. 请求参数(Request Parameters):

可以通过查询字符串(对于GET请求)对于GET请求,参数会附加在URL后面,如`/user?username=johndoe`;

在Spring MVC中,您可以通过不同的方式接收请求参数,包括查询字符串参数。对于GET请求,查询字符串参数通常附加在URL的末尾,如`/user?username=johndoe`。以下是如何在Spring MVC控制器中接收查询字符串参数的示例:

1. 使用@RequestParam注解接收单个参数:

```java

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class UserController {

    @GetMapping("/user")
    public String getUser(@RequestParam String username) {
        // 在这里使用接收到的参数
        System.out.println("Received username: " + username);
        return "user";
    }
}


```

在上面的示例中,`@RequestParam`注解用于将`username`参数从查询字符串中提取出来并将其传递给`getUser`方法。

2. 接收多个参数:

```java

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class UserController {

    @GetMapping("/user")
    public String getUser(@RequestParam String username, @RequestParam int age) {
        // 在这里使用接收到的参数
        System.out.println("Received username: " + username);
        System.out.println("Received age: " + age);
        return "user";
    }
}


```

在这个示例中,我们接收了两个参数,`username`和`age`,它们都来自于查询字符串。

3. 使用对象绑定:

您还可以创建一个POJO(普通的Java对象)来表示请求参数,并使用它进行参数绑定。例如:

```java

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UserController {

    @GetMapping("/user")
    public String getUser(UserRequest userRequest) {
        // 在这里使用接收到的参数
        System.out.println("Received username: " + userRequest.getUsername());
        System.out.println("Received age: " + userRequest.getAge());
        return "user";
    }
}


```

然后,创建一个名为`UserRequest`的POJO类,它包含与查询字符串参数相对应的字段和相应的getter和setter方法。

```java

public class UserRequest {
    private String username;
    private int age;

    // getter 和 setter 方法
}


```

Spring MVC将自动将查询字符串参数映射到`UserRequest`对象的属性上。

这些示例演示了如何在Spring MVC中接收查询字符串参数。根据需要,可以选择使用`@RequestParam`注解对象绑定的方式来处理请求参数。

3. 表单参数(Form Parameters):

对于POST请求,参数通常是表单字段或JSON数据。可以通过HTML表单中的表单字段来传递参数。

**案例:POST请求传递表单参数**

假设我们要创建一个新用户,可以使用POST请求来传递表单参数:

```java

@Controller
@RequestMapping("/users")
public class UserController {

    @PostMapping("/create")
    public ResponseEntity<User> createUser(@RequestParam String username, @RequestParam String email) {
        // 创建新用户
        User newUser = userService.createUser(username, email);
        return ResponseEntity.ok(newUser);
    }
}


```

在上述示例中,`@RequestParam`注解用于从表单字段中提取`username`和`email`参数。这是一种POST请求传递表单参数的方式。此时,不需要设置特定的`Content-Type`请求头,因为默认是`application/x-www-form-urlencoded`。

4. 请求体(Request Body):

对于POST请求,可以将参数作为请求体中的JSON数据或其他自定义格式的数据传递。这通常需要设置请求头的`Content-Type`,以指定请求体的数据类型,如`application/json`

**案例:POST请求传递JSON数据**

如果要通过POST请求传递JSON数据,可以这样做:

```java

@Controller
@RequestMapping("/users")
public class UserController {

    @PostMapping("/create")
    public ResponseEntity<User> createUser(@RequestBody UserRequest userRequest) {
        // 创建新用户,userRequest是包含JSON数据的POJO类
        User newUser = userService.createUser(userRequest);
        return ResponseEntity.ok(newUser);
    }
}


```

'''java

@RestController
@RequestMapping("/User")
public class UserController {
    @Autowired
    private UserServiceimpl userServiceimpl;

    @RequestMapping("/select")
    public RespBody findAllUser(@RequestBody UserRequestDTO userDto){
        PageInfo pages = userDto.getPages();
        if (pages == null) {
            return new RespBody(501,null,"查询失败");
        }
        return new RespBody<PageInfo>(200,pages,"查询成功");
    }
}

'''

 UserDto如下:

'''java

@Getter
@Setter
public class UserRequestDTO {
    private PageInfo pages;
    private SysUser users;
}

'''

在这个案例中,`@RequestBody`注解用于将请求体中的JSON数据映射到`UserRequest`类的对象中。要确保设置请求头的`Content-Type`为`application/json`,以指示请求体中包含JSON数据。

关于GET和POST请求的注意事项:

- GET请求:参数通常以查询字符串的形式附加在URL后面,因此参数会在URL中可见。这意味着对于敏感信息,不应该使用GET请求,因为参数可能会被记录在服务器日志中,或者因为浏览器历史记录而暴露给用户。

- POST请求:通常用于传递敏感信息或大量数据。对于表单参数,通常使用`application/x-www-form-urlencoded`的`Content-Type`。对于传递JSON等数据的请求,可以使用`application/json`的`Content-Type`。要注意,如果使用JSON等自定义数据格式,通常使用`application/json`的`Content-Type`

总之,在Spring MVC中,可以根据需要选择适当的传参方式,但需要注意传参的安全性和数据格式,以确保数据的正确传递和安全性。要根据具体的需求来选择使用GET请求还是POST请求,并且设置相应的请求头和内容类型。如果使用POST请求,确保请求体的数据格式与`Content-Type`一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值