springboot请求与响应(常用注解)

目录

@Controller注解

@ResponseBody注解

@RestController注解

@RequestMapping

@GetMapping和@PostMapping

@RequestParam

简单参数请求

实体参数请求

复杂实体参数请求

​编辑

数组集合参数请求

​编辑

@DateTimeFormat

日期参数请求

@RequestBody

Json参数请求

@PathVariable

​编辑

@RequestHeader

 @CookieValue


@Controller注解

@Controller注解是Spring MVC中用于标记一个类为Controller的注解。被@Controller注解的类会自动被Spring容器扫描并识别为一个控制器类。该类中可以定义多个处理HTTP请求的方法,并通过其他相关注解来指定请求映射和处理逻辑。

@ResponseBody注解

该注解告诉Spring将方法的返回值直接写入HTTP响应的body中。如果返回类型是实体类型是实体对象/集合,转为json格式响应

@RestController注解

 该注解是@Controller和@ResponseBody的结合体,一般用于类,作用等于在类上面添加了
@ResponseBody和@Controller

@RequestMapping

@RequestMapping注解用于映射HTTP请求到特定的处理方法上。它可以作用在类或者方法上,当作用在类上时,表示该类中的所有方法都将映射到指定的URL路径下。@RequestMapping注解可以指定请求的URL路径、请求方法(GET、POST等)、请求参数等信息。通过灵活地使用@RequestMapping注解,可以实现复杂的请求映射需求。

@GetMapping和@PostMapping

@GetMapping和@PostMapping注解是@RequestMapping注解的特例,分别用于处理HTTP的GET请求和POST请求。这两个注解简化了常用的HTTP请求方法的映射配置,使得代码更加简洁易读。@GetMapping注解用于处理查询操作,通常用于获取数据;而@PostMapping注解则用于处理提交操作,通常用于新增或更新数据。

需要编写Resful风格还有@PutMapper、@DeleteMapper等注解

@RequestParam

这个注解主要用于将请求中的参数绑定到控制器方法的参数上。使用 @RequestParam 注解,可以指定请求参数的名称,以便从请求中获取对应的参数值。

@RequestParam 注解有几个重要的属性:

  1. value:指定请求参数的名称。这是必须的属性,但如果请求参数的名称和方法参数的名称相同,则可以省略。
  2. required:指定请求参数是否必需。默认为 true,表示参数是必需的。如果请求中没有提供该参数,且该参数被标记为必需,那么将会抛出异常。如果设置为 false,则表示参数是可选的。

    如果不提供这个可选参数,Spring Boot将不会报错,而是会为该参数设置一个默认值或者为null(如果没有默认值且参数类型是原始类型,比如int,则会报错)。

  3. defaultValue:指定请求参数的默认值。如果请求中没有提供该参数,那么将使用该默认值。需要注意的是,如果设置了 defaultValue,那么 required 属性会自动被设置为 false,无论你是否显式设置了 required

简单参数请求
  • 参数名与形参变量名相同,定义形参就可以接收参数

  • 如果方法形参名称与请求参数名称不匹配,可以使用@RequestParam

实体参数请求

请求参数名与形参属性名相同,定义POJO接收即可

复杂实体参数请求

请求参数名与形参属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

数组集合参数请求
  • 数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数封装,如多选框

  • 集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系

@DateTimeFormat

主要用于格式化日期和时间。这个注解通常应用在方法参数或属性上,以便将字符串类型的日期时间数据转换为 java.util.Datejava.util.Calendarjava.time.LocalDateTime 等日期时间类型。

使用场景

在 Web 应用程序中,用户输入的日期和时间通常都是字符串形式,而后端程序往往需要将这些字符串转换为日期时间对象进行处理。@DateTimeFormat 注解可以帮助我们自动完成这个转换过程。

@DateTimeFormat 注解有一些重要的属性,如:

  • pattern:自定义日期时间的格式,例如 "yyyy-MM-dd HH:mm:ss"
  • iso:使用 ISO 日期时间格式。
  • style:日期时间的样式,可以是 DEFAULTSHORTMEDIUMLONG 或 FULL
日期参数请求

@RequestBody

@RequestBody 是 Spring Framework 中用于处理 HTTP 请求体内容的一个重要注解。这个注解主要应用在控制器(Controller)类的方法参数上,它指示一个方法参数应该被绑定到请求体的内容。通常,这是在使用 HTTP POST 或 PUT 请求发送 JSON、XML 或其他媒体类型数据时使用的。

当使用 @RequestBody 注解时,Spring 的 HttpMessageConverter 负责将请求体的内容转换为方法参数所指定的类型。最常见的场景是将 JSON 数据转换为 Java 对象(如 DTOs 或简单的 POJOs)。

使用场景

假设你有一个 REST API,客户端通过 POST 请求发送 JSON 数据来创建一个新的用户。在服务器端,你可以使用 @RequestBody 注解来自动将 JSON 数据转换为相应的 Java 对象。

注意事项

  • 使用 @RequestBody 时,通常请求头的 Content-Type 应该设置为 application/json(或其他媒体类型,如 application/xml,取决于你发送的数据类型)。
  • @RequestBody 和 @RequestParam 可以在同一个方法中使用,但 @RequestBody 最多只能有一个,而 @RequestParam 可以有多个。
  • 如果请求体为空或无法转换为指定的类型,Spring 将抛出一个异常。你可以通过全局异常处理或控制器级别的异常处理来处理这些异常。
Json参数请求

键名与形参对象属性名相同,定义POJO类型形参即可接收参数,层级嵌套json即可 

@PathVariable

@PathVariable 是 Spring Framework 提供的注解,用于将 URI 模板变量绑定到控制器方法的参数上。当你需要构建 RESTful 风格的 Web 服务时,@PathVariable 是非常有用的,因为它允许你通过 URI 路径中的值来传递参数。

使用场景

假设你有一个用于检索用户信息的 REST API,并且你希望通过用户的 ID 来获取用户数据。你可以将用户 ID 作为 URI 路径的一部分,并使用 @PathVariable 来获取这个值。

@PathVariable 注解有一个主要的属性:

  • value:指定 URI 模板变量的名称。如果方法参数的名称与 URI 模板变量的名称相同,则可以省略该属性。

注意事项

  • 如果 URI 模板变量的值无法转换为方法参数的类型,Spring 将抛出一个异常。确保 URI 模板变量的值与方法参数的类型兼容。
  • 你可以在一个控制器方法中使用多个 @PathVariable 注解,以便从 URI 路径中提取多个值。

 路径参数请求:通过请求URL直接传递参数,使用{...}来标识路径参数

@RequestHeader

它允许开发者从 HTTP 请求的头部获取特定的信息,并将其注入到控制器方法的参数中。这个注解对于需要读取和使用请求头信息的场景非常有用,比如根据客户端发送的 User-Agent 信息来定制响应内容,或者获取其他自定义的请求头数据。

使用场景

  • 当你的应用程序需要根据 HTTP 请求头中的信息(如 Accept-LanguageUser-Agent 等)来定制响应时。
  • 当客户端通过请求头发送自定义的数据,而服务器端需要读取这些数据以进行进一步处理时。

主要属性

  • value:指定要获取的请求头的名称。
  • required:指定请求头是否为必需。默认为 true,如果请求中没有包含该请求头且此属性设置为 true,将会抛出异常。如果设置为 false,则在没有该请求头时,方法参数将被设置为 null 或默认值(如果指定了 defaultValue)。
  • defaultValue:指定当请求中没有包含该请求头时的默认值。如果没有设置此属性且请求中没有包含该请求头,当 required 为 false 时,方法参数将被设置为 null

 @CookieValue

它用于从 HTTP 请求的 Cookie 中获取指定的值,并将其注入到控制器方法的参数中。这个注解在处理需要读取 Cookie 信息的场景时非常有用,比如验证用户的会话状态、获取用户的偏好设置等。

主要属性

  • value:指定要获取的 Cookie 的名称。这是必需的属性,用于标识要从请求中提取的 Cookie。
  • required:指定是否必须存在该 Cookie。默认为 true,如果请求中没有包含该 Cookie 且此属性设置为 true,将会抛出异常。如果设置为 false,则在请求中没有该 Cookie 时,方法参数将被设置为 null 或默认值(如果指定了 defaultValue)。
  • defaultValue:指定当请求中没有包含该 Cookie 时的默认值。如果没有设置此属性且请求中没有包含该 Cookie,当 required 为 false 时,方法参数将被设置为 null

注意事项

  • 如果请求的 Cookie 中没有包含所需的 Cookie,且 required 属性设置为 true(默认值),Spring 将抛出一个异常。为了避免这种情况,可以确保客户端发送了正确的 Cookie,或者将 required 属性设置为 false 并提供一个默认值。
  • @CookieValue 注解只能用于控制器方法的参数上,不能用于字段或方法上。此外,它通常与 @RequestMapping(或 @GetMapping@PostMapping 等)注解一起使用,以指定处理哪些 HTTP 请求。

统一响应结果

在前面所编写的这些Controller方法中,返回值各种各样,没有任何的规范。前端人员如果拿到的响应数据没有统一的规范,就需要针对不同的响应数据使用不同的解析方式。这样就会造成开发成本高,项目管理不方便,维护难。

所以,在开发中,无论有多少的方法,都应该定义一个统一的返回结果,如下定义的话,前端就只需要按照统一格式的返回结果进行解析(仅一种解析方案),就可以拿到数据。

统一的返回结果使用类来描述,在这个结果中包含:

  • 响应状态码:当前请求是成功,还是失败

  • 状态码信息:给页面的提示信息

  • 返回的数据:给前端响应的数据(字符串、对象、集合)

定义在一个实体类Result来包含以上信息。代码如下:

package com.itheima.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应码 描述字符串
    private Object data; //返回的数据

    //增删改 成功响应(不需要给前端返回数据)
    public static Result success(){
        return new Result(1,"success",null);
    }
    //查询 成功响应(把查询结果做为返回数据响应给前端)
    public static Result success(Object data){
        return new Result(1,"success",data);
    }
    //失败响应
    public static Result error(String msg){
        return new Result(0,msg,null);
    }

}

controller代码:

package com.itheima.controller;

import com.itheima.pojo.Address;
import com.itheima.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class ResponseController {

    @RequestMapping("/hello")
    public Result hello(){
        return Result.success("helloworld");
    }


    @RequestMapping("/getAddr")
    public Result getAddr(){
        Address addr = new Address("广州","广东");
        return Result.success(addr);
    }

    @RequestMapping("/listAddr")
    public Result listAddr(@RequestParam(value = "err", required = false) String err){
        List<Address> list = new ArrayList<>();

        Address addr = new Address("深圳","广东");
        Address addr2 = new Address("韶关","广东");
        list.add(addr);
        list.add(addr2);
        if (err != null)
            return Result.error("参数错误!");
        return Result.success(list);
    }



}

postman测试结果

 

  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot是一个基于Spring框架的快速开发的框架,它的注解非常丰富,可以用来配置和控制Spring Boot应用程序的各种方面。下面是一些常用的Spring Boot注解及其解析。 1. @SpringBootApplication 这是Spring Boot应用程序的主要注解,它包含了@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解。其中@Configuration用于定义配置类,@EnableAutoConfiguration用于自动配置Spring Boot应用程序,@ComponentScan用于扫描组件。 2. @RestController @RestController用于定义RESTful Web服务,它是@Controller和@ResponseBody的组合注解。@Controller用于定义控制器,@ResponseBody用于返回数据。 3. @RequestMapping @RequestMapping用于定义Web请求的映射关系,它可以用于类或方法级别。在类级别上,它定义了一组请求映射,而在方法级别上,它定义了一个具体的请求映射。 4. @PathVariable @PathVariable用于从URI中提取变量值,它可以用于方法参数上。 5. @RequestParam @RequestParam用于从请求参数中提取变量值,它也可以用于方法参数上。 6. @RequestBody @RequestBody用于将请求体中的JSON或XML数据转换为Java对象,它也可以用于方法参数上。 7. @ResponseStatus @ResponseStatus用于定义响应状态码,它可以用于控制器方法上。 8. @ExceptionHandler @ExceptionHandler用于定义异常处理程序,它可以用于控制器类或方法上。 9. @Autowired @Autowired用于自动装配依赖,它可以用于属性、构造方法或方法参数上。 10. @Value @Value用于注入配置属性值,它可以用于属性或方法参数上。 以上是一些常用的Spring Boot注解及其解析,当然还有很多其他的注解,可以根据具体情况选择使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

癞皮狗不赖皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值