SpringBoot项目Controller的几种参数传递和接收方式

软件 › 编程语言 › JAVA 售价:0鸟蛋 浏览:45 时间:星期前
SpringBoot参数传递

        在Spring项目中,Controller层作为与前端交互的核心层,主要负责的是对前端的请求的解析操作,以及对后端服务层逻辑的调用,进行请求响应反馈的操作。在进行客户端请求参数处理的时候,Spring Boot的Controller层中提供了多种的参数接收方案,下面就来详细的介绍一下这些参数接收方法。

通过 @RequestParam 接收请求参数

        用来接收URL中的查询参数,如GET请求/api/user?name=John&age=30中的相关参数如下所示:

@RestController
@RequestMapping("/api/user")
public class UserController {

    @GetMapping
    public String getUserInfo(
        @RequestParam String name, 
        @RequestParam(defaultValue = "0") int age
    ) {
        return "Name: " + name + ", Age: " + age;
    }
}

        这种方式直接指定了参数名和参数方法的对应关系,可以为请求参数设置默认值,提高了操作的灵活性。

通过 @PathVariable 接收路径参数

        可以用来接收URL路径中的动态参数,如GET请求 /api/user/123中的123路径参数。通过{}占位符中获取路径变量,如下所示:

@RestController
@RequestMapping("/api/user")
public class UserController {

    @GetMapping("/{id}")
    public String getUserById(@PathVariable("id") Long userId) {
        return "User ID: " + userId;
    }
}

        这种方式非常适合RESTFul的动态路由解析,但是要求必须有路径参数存在,否则会报错。

通过@RequestBody接收请求体参数

        用来处理POST、PUT请求中的JSON或XML格式的请求体参数,但是需要配合Jackson或Gson等工具进行序列化/反序列化操作,在Spring Boot中默认提供了Jackson的支持,如下所示:

@RestController
@RequestMapping("/api/user")
public class UserController {

    @PostMapping
    public String createUser(@RequestBody User user) {
        return "Created user: " + user.getName() + ", Age: " + user.getAge();
    }
}

class User {
    private String name;
    private int age;

    // Getters and Setters
}

        这种方式适合传递一些复杂的参数结构,需要客户端中提供严格的数据参数,否则就会因为格式检查而抛出异常或者是序列化的异常。

通过@RequestHeader接收请求头参数

        这种方式适合从HTTP请求头中进行参数的提取,例如Authorization、Content-Type等参数的获取可以通过这种方式来获取:

@RestController
@RequestMapping("/api/user")
public class UserController {

    @GetMapping("/info")
    public String getUserInfo(@RequestHeader("Authorization") String authHeader) {
        return "Authorization Header: " + authHeader;
    }
}

        这种方式适合从客户端传递的元信息中进行参数的提取,并且还支持了默认值的设置。

通过@CookieValue接收Cookie参数

        这种方式是和从请求的Cookie中提取参数,专门用于提取客户端的Cookie数据,与@RequestHeader类似,但是更加语义化,如下所示:

@RestController
@RequestMapping("/api/user")
public class UserController {

    @GetMapping("/profile")
    public String getProfile(@CookieValue("SESSIONID") String sessionId) {
        return "Session ID: " + sessionId;
    }
}

通过@ModelAttribute接收表单参数

        这种方式用于将表单数据绑定到一个Java对象中,适用于表单提交的操作中,如下所示:

@RestController
@RequestMapping("/api/user")
public class UserController {

    @PostMapping("/register")
    public String registerUser(@ModelAttribute User user) {
        return "Registered user: " + user.getName() + ", Age: " + user.getAge();
    }
}

class User {
    private String name;
    private int age;

    // Getters and Setters
}

        通过这种方式可以方便的将多个参数绑定到一个对象中,但是需要保证字段名称与对象的属性的一致性。

通过HttpServletRequest和HttpServletResponse接收原始数据

        这种方式适合需要直接操作底层HTTP请求和响应对象时使用,用于获取更多信息,如下所示:

@RestController
@RequestMapping("/api/user")
public class UserController {

    @GetMapping("/details")
    public String getDetails(HttpServletRequest request) {
        String clientIp = request.getRemoteAddr();
        return "Client IP: " + clientIp;
    }
}

        通过这种方式来处理一些高级的HTTP处理场景,但是一般不推荐直接对其参数进行操作。

提问 收藏 举报 1 0
评论(0)
评论
  • 还没有评论,发表第一个评论吧

0 0 1 9 2
提问 回答 资料 博客 粉丝
近期阅读