Java学习--request请求与响应

目录

一、原始方式

二、SpringBoot方式

1.简单参数

2.实体参数

3.数组集合参数

4.日期参数

5.JSON参数

6.路径参数

三、SpringBoot请求参数注解

1. @RequestMapping

2. @GetMapping

3. @PostMapping

4. @PutMapping

5. @DeleteMapping

6. @PatchMapping

7. @RequestParam

8. @PathVariable

9. @RequestBody

10. @RequestHeader

四、响应

1.@Controller

2.@ResponseBody

3.@RestController


如果不使用springboot框架

一、原始方式

在Java Web应用中,可以使用HttpServletRequest对象来获取HTTP请求的参数。HttpServletRequest对象包含了请求的所有信息,包括请求行、请求头、请求体和参数。

具体Servlet基础之HttpServletRequest详解-优快云博客

@RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request){
        String name = request.getParameter("name");
        String ageStr= request.getParameter("age");
        int age = Integer.parseInt(ageStr);
        System.out.println(name + " " + age);
        return "OK";

因为Servlet在MVC架构中是充当controller这个角色的,其负责响应用户的请求,也就需要和用户进行交互,负责获取从前端(JSP,客户端)获取数据(用户输入、或者查询条件等),并在处理结束后,给客户端一个响应。如果无法获取页面数据,那么后续的操作也就无从谈起。

​ 当然,为了方便获取页面中的参数,HttpServletRequest也也也提供了一系列的方法,相关方法如下:

在使用springboot框架后

@RequestMapping("/simpleParam")
    public String simpleParam(String name, Integer age){
        System.out.println(name + " " + age);
        return "OK";
    }

可以看到大大简化了代码;

下面简单记录一下springboot在处理不同数据的情况

二、SpringBoot方式

1.简单参数

定义方法形参,请求参数名与形参变量名一致。
如果不一致,通过 @RequestParam 手动映射。
@RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name = "name") String username, Integer age){
        System.out.println(username + " " + age);
        return "OK";
    }

2.实体参数

请求参数名,与实体对象的属性名一致,会自动接收封装
public class User {
    private String name;
    private Integer age;
}


@RequestMapping("/complexParam")
    public String complexParam(User user){
        System.out.println(user.toString());
        return "OK";
    }
public class User {
    private String name;
    private Integer age;
    private Address address;
}

public class Address {
    private String province;
    private String city;
}

@RequestMapping("/complexParam")
    public String complexParam(User user){
        System.out.println(user.toString());
        return "OK";
    }

3.数组集合参数

数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

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

 @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }
@RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OK";
    }

4.日期参数

日期参数:使用 @DateTimeFormat 注解完成日期参数格式转换
//日期时间参数
    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime){
        System.out.println(updateTime);
        return "OK";
    }

5.JSON参数

JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 @RequestBody

 //5.json传参数
    @RequestMapping( "/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user.toString());
        return "OK";
    }

6.路径参数

路径参数:通过请求 URL 直接传递参数,使用 {…} 来标识该路径参数, 需要使用 @ PathVariable 获取路径参数
//6.路径参数
    @RequestMapping("/path/{id}")
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "ok";
    }

    @RequestMapping("/path/{id}/{name}")
    public String pathParam(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id + name);
        return "ok";
    }

三、SpringBoot请求参数注解

在 Spring Boot 中,处理 HTTP 请求的注解主要包括以下几种:

1. @RequestMapping

用于将 HTTP 请求映射到处理器方法。可以应用于类或方法上。
常用属性:
value:指定请求的 URL。
method:指定请求的 HTTP 方法(如 GET、POST 等)。
produces:指定返回的媒体类型(如 application/json)。
consumes:指定处理的媒体类型(如 application/json)。

@RequestMapping(value = "/users", method = RequestMethod.GET) 
public List<User> getAllUsers() { // 处理逻辑 }

2. @GetMapping

是 @RequestMapping 的快捷方式,用于处理 HTTP GET 请求。
示例:

@GetMapping("/users") public List<User> getAllUsers() { // 处理逻辑 }

3. @PostMapping

是 @RequestMapping 的快捷方式,用于处理 HTTP POST 请求。
示例:

@PostMapping("/users") public User createUser(@RequestBody User user) { // 处理逻辑 }

4. @PutMapping

是 @RequestMapping 的快捷方式,用于处理 HTTP PUT 请求。
示例:

@PutMapping("/users/{id}") public User updateUser(@PathVariable Long id, @RequestBody User user) { // 处理逻辑 }

5. @DeleteMapping

是 @RequestMapping 的快捷方式,用于处理 HTTP DELETE 请求。
示例:

@DeleteMapping("/users/{id}") 
public void deleteUser(@PathVariable Long id) {
 // 处理逻辑 
}

6. @PatchMapping

是 @RequestMapping 的快捷方式,用于处理 HTTP PATCH 请求。
示例:

@PatchMapping("/users/{id}") 
public User partiallyUpdateUser(@PathVariable Long id, @RequestBody Map<String, Object> updates) { 
    // 处理逻辑
}

7. @RequestParam

用于获取 URL 中的查询参数。
示例:

@GetMapping("/users") 
public List<User> getUsers(@RequestParam(name = "page", defaultValue = "1") int page) 
{ 
    // 处理逻辑 
}

8. @PathVariable

用于获取 URL 路径中的变量。
示例:

@GetMapping("/users/{id}") 
public User getUserById(@PathVariable Long id) { 
// 处理逻辑 
}

9. @RequestBody

用于将请求体中的 JSON 自动转换为 Java 对象。
示例:

@PostMapping("/users") 
public User createUser(@RequestBody User user) { // 处理逻辑 }

@PathVariable 用于从 URL 路径中获取数据,而 @RequestBody 用于从 HTTP 请求体中获取数据。
@PathVariable 常用于 RESTful 风格的 URL 中获取资源标识符,如 ID、名称等。

@RequestBody 常用于处理 POST、PUT 等请求方法,接收请求体中的数据。

10. @RequestHeader

用于获取请求头中的信息。

示例:

@GetMapping("/users") 
public List<User> getUsers(@RequestHeader("Authorization") String token) { // 处理逻辑 }

四、响应

1.@Controller

在采用@Contoller注解的方式,可以使接口的定义更加简单,将@Controller标记在某个类上,配合@RequestMapping注解,可以在一个类中定义多个接口,这样使用起来更加灵活。

被@Controller标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类,而@Contoller注解在org.springframework.stereotype包下。其中被@RequestMapping标记的方法会被分发处理器扫描识别,将不同的请求分发到对应的接口上。

2.@ResponseBody

@ResponseBody 将方法的返回值,以特定的格式写入到response的body区域 [HTTP response body],进而将数据返回给客户端。
当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。当它标注类时,类中所有方法的返回值都将直接返回值到页面,相当于给所有的类都加上@ResponseBody注解。

如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。

使用位置:一般在异步获取数据时使用[也就是AJAX],在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入HTTP response body 中。

举例:比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。

3.@RestController

@RestController = @Controller + @ResponseBody

@RestController注解相当于@ResponseBody + @Controller合在一起的作用,只能注解类。

使用@RestController这个注解,直接写入HTTP相应体返回到页面中。
此时 return “xx”,只会返回"xx"的内容。因为@RestController中相当于已经有了@RessponseBody的注解效果,它会以json字符串的形式返回给客户端。

SpringBoot请求注解详解_springboot请求参数注解-优快云博客
Servlet基础之HttpServletRequest详解-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值