在SpringBoot2.x中,controller层有哪些注解获取前端传过来的值

在SpringBoot2.x中,controller层有哪些注解获取前端传过来的值,有什么情况不需要注解也能获取到值?

在 Spring Boot 2.x 中,Controller 层可以使用的注解用于获取前端传递过来的值有以下几种:

1. @PathVariable:用于获取 URL 路径中的参数。例如:

@GetMapping("/users/{id}")
public User getUser(@PathVariable("id") Long id) {
    // ...
}



2. @RequestParam:用于获取请求参数(通常是查询参数)。例如:

@GetMapping("/users")
public List<User> getUsers(@RequestParam(value = "name", required = false) String name) {
    // ...
}

当你将 required 属性设置为 false 时,表示这个参数是可选的,即使请求中没有包含这个参数,也不会抛出异常。在这种情况下,如果请求中没有包含这个参数,对应的方法参数将会被赋予一个默认值,通常是 null。这个属性在 @RequestParam@RequestHeader@CookieValue可用


2.1 在某些情况下,不需要使用@RequestParam注解也可以获取前端传过来的值。

例如,当方法参数名与请求参数名(即 URL 上带的参数)相同时,Spring 会自动将请求参数绑定到方法参数上。以下例子展示了如何不使用 @RequestParam 注解获取请求参数:

@GetMapping("/users")
public List<User> getUsers(String name) {
    // ...
}

但是,建议在实际开发中明确使用注解,这样可以提高代码的可读性和可维护性。


2.2 当方法参数名(自定义类)与请求参数名相同时可省略@RequestParam吗

当方法参数是自定义类时,不能省略 @RequestParam 注解来直接将请求参数绑定到方法参数上。在这种情况下,你应该使用 @ModelAttribute 注解,或者不使用任何注解。Spring 会自动将请求参数绑定到方法参数的相应属性上,前提是请求参数的名称和方法参数的属性名称相同。

例如,假设你有一个名为 User 的自定义类,它有两个属性:nameage。你可以使用以下方法将请求参数绑定到 User 类的实例上:

@PostMapping("/users")
public String createUser(@ModelAttribute User user) {
    // ...
}

或者,你可以省略 @ModelAttribute 注解,Spring 仍然会自动将请求参数绑定到方法参数上:

@PostMapping("/users")
public String createUser(User user) {
    // ...
}

需要注意的是,当方法参数是自定义类时,请求中的参数通常应该是表单参数(即 application/x-www-form-urlencoded 类型的数据),而不是 URL 上的查询参数或请求体中的 JSON 数据。如果请求参数是 JSON 数据,你应该使用 @RequestBody 注解来处理这种情况。

2.3@RequestParam还能设置默认值

可以使用 @RequestParam 注解的 defaultValue 属性为请求参数设置默认值。当客户端没有提供该参数时,方法参数将使用设置的默认值。以下是一个示例:

@GetMapping("/greet")
public String greet(@RequestParam(value = "name", defaultValue = "World") String name) {
    return "Hello, " + name + "!";
}

在此示例中,name 参数的默认值为 "World"。当客户端发送不包含 name 参数的请求时,该方法将使用默认值。例如:

  • 请求 URL: /greet?name=John,响应:Hello, John!
  • 请求 URL: /greet(未提供 name 参数),响应:Hello, World!

通过为请求参数设置默认值,你可以确保方法在缺少某些参数时仍能正常工作。请注意,defaultValue 属性的值必须是一个字符串,即使方法参数的类型不是字符串。在运行时,Spring 会尝试将字符串值转换为方法参数的实际类型,因此请确保默认值与参数类型兼容。如果转换失败,将抛出一个类型转换异常。

以下是一个将 defaultValue 转换为整数的示例:

@GetMapping("/square")
public String square(@RequestParam(value = "number", defaultValue = "2") int number) {
   int result = number * number;
   return "The square of " + number + " is " + result;
}

在这个示例中,number 参数的默认值是字符串 "2"。当客户端没有提供 number 参数时,Spring 会将其转换为整数 2。类似地,你可以将 defaultValue 的值转换为其他类型,例如浮点数。只需确保>默认值与参数类型兼容,否则会抛出类型转换异常。




3. @RequestBody:用于获取请求体中的数据,通常用于处理 JSON 格式的数据。例如:

@PostMapping("/users")
public User createUser(@RequestBody User user) {
    // ...
}

3.1 当请求体不是 JSON 格式时,你可以根据请求体的实际内容类型来处理请求数据。以下是一些常见的请求内容类型和相应的处理方法:

  1. 表单数据(application/x-www-form-urlencoded:表单数据是 Web 表单提交的默认数据格式。在 Spring MVC 中,你可以使用 @ModelAttribute 注解将请求参数绑定到方法参数(通常是自定义类的实例)上。

    @PostMapping("/users")
    public String createUser(@ModelAttribute User user) {
        // ...
    }
    
  2. 多部分文件上传(multipart/form-data:当请求中包含文件上传时,您可以使用 @RequestParam 注解与 MultipartFile 类来处理上传的文件。

    @PostMapping("/upload")
    public String handleFileUpload(@RequestParam("file") MultipartFile file) {
        // ...
    }
    
  3. 纯文本(text/plain:如果请求体包含纯文本数据,你可以使用 @RequestBody 注解将请求体绑定到一个 String 类型的方法参数上。

    @PostMapping(value = "/text", consumes = "text/plain")
    public String handleTextData(@RequestBody String text) {
        // ...
    }
    
  4. 其他自定义格式:如果请求体是其他自定义格式,你可以使用 @RequestBody 注解将请求体绑定到一个 String 类型的方法参数上,然后根据需要手动解析请求数据。

    @PostMapping(value = "/custom", consumes = "application/vnd.your-custom-format")
    public String handleCustomData(@RequestBody String data) {
        // 解析 data
        // ...
    }
    

在处理非 JSON 请求体时,请确保正确设置请求中的 Content-Type 头,以便 Spring MVC 能够正确地处理请求数据。同时,在方法上使用 consumes 属性来指定处理特定 Content-Type 的请求。




4. @RequestHeader:用于获取请求头中的数据。例如:

@GetMapping("/users")
public List<User> getUsers(@RequestHeader("Authorization") String token) {
    // ...
}



5. @CookieValue:用于获取 Cookie 中的数据。例如:

@GetMapping("/users")
public List<User> getUsers(@CookieValue("sessionId") String sessionId) {
    // ...
}



6.@DateTimeFormat获取请求参数中的日期或时间类型数据

在 Spring 中,如果需要获取请求参数中的日期或时间类型数据,可以使用 @DateTimeFormat 注解。@DateTimeFormat 注解可以与 @RequestParam 注解一起使用,以自定义日期和时间类型参数的解析格式。

例如,获取一个日期参数:

@GetMapping("/events")
public List<Event> getEvents(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {
    // ...
}

在这个例子中,URL 上的请求参数名为 “date”,方法参数名也为 “date”。@DateTimeFormat 注解指定了日期格式为 “yyyy-MM-dd”,因此,Spring 将根据这个格式来解析请求参数 “date” 的值,并将其绑定到方法参数 “date” 上。

这些注解的组合可以方便地处理日期和时间类型的请求参数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值