【Java 中级】一文精通 Spring MVC - JSON 处理(九)

发布于:2023-09-22 ⋅ 阅读:(60) ⋅ 点赞:(0)

在这里插入图片描述

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主

⛪️ 个人社区:个人社区
💞 个人主页:个人主页
🙉 专栏地址: ✅ Java 中级
🙉八股文专题:剑指大厂,手撕 Java 八股文

1. 如何处理 JSON 的请求和响应

在Spring MVC中处理JSON请求和响应有几种方法。以下是其中两种常用的方法:

  1. 使用@RequestBody和@ResponseBody注解:

    • 对于处理JSON请求,可以在Controller的方法参数上使用@RequestBody注解。这将自动将请求的JSON数据绑定到方法参数对象中。
    • 对于JSON响应,可以在Controller的方法上使用@ResponseBody注解。这将自动将方法返回的对象转换为JSON格式,并作为响应发送回客户端。

    例如,假设我们有一个User类表示用户信息:

@Data
public class User {
    private String name;
    private int age;
}

然后,我们可以在Controller中使用这些注解来处理JSON请求和响应:

@RestController
public class UserController {
     @PostMapping("/users")
     public void createUser(@RequestBody User user) {
         // 处理接收到的JSON请求
     }

     @GetMapping("/users/{id}")
     public User getUser(@PathVariable int id) {
         // 返回User对象,将自动转换为JSON响应
         User user = // 从数据库获取用户信息
         return user;
     }
 }
  1. 使用@ResponseBody和ResponseEntity:

    • 对于JSON请求,可以直接在方法参数上使用@RequestBody注解,与第一种方法相同。
    • 对于JSON响应,可以使用ResponseEntity类来包装响应数据,并设置HTTP状态码、头部信息等。同时,可以使用@ResponseBody注解将返回的对象转换为JSON格式。

    例如:

@RestController
public class UserController {
    @PostMapping("/users")
    public void createUser(@RequestBody User user) {
        // 处理接收到的JSON请求
    }

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUser(@PathVariable int id) {
        // 从数据库获取用户信息
        User user = // ...
        return ResponseEntity.ok(user); // 返回User对象,并设置HTTP状态码为200
    }
}

2. @ResponseBody 响应json

@ResponseBody注解用于将方法的返回值转换为JSON格式,并作为响应发送回客户端。在Spring MVC中,默认情况下,使用Jackson库来进行JSON转换。

下面是一个示例代码,展示如何在Spring MVC中使用@ResponseBody注解来响应JSON数据:

@RestController
public class UserController {
    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUser(@PathVariable int id) {
        // 从数据库获取用户信息
        User user = // ...
        return ResponseEntity.ok(user); // 返回User对象,并设置HTTP状态码为200
    }
}

getUser() 方法使用 @GetMapping 注解来处理GET请求,并使用 @PathVariable 注解来接收路径参数。方法的返回类型是 ResponseEntity<User> ,其中 User 是表示用户信息的类。 ResponseEntity 是Spring MVC提供的一个类,用于封装响应数据,包括HTTP状态码、头部信息等。

通过 ResponseEntity.ok(user) ,我们将 User 对象作为响应体,并设置HTTP状态码为200(表示成功)。由于在类上使用了 @RestController 注解,方法的返回值将自动转换为JSON格式,并作为响应发送回客户端。

3. @RequestBody 响应 json

3.1. 通过ajax接收单个简单类型参数

如果你想通过Ajax接收单个简单类型参数,并将响应以JSON格式返回,可以使用@ResponseBody注解来实现。在Spring MVC中,默认使用Jackson库进行JSON转换。

以下是一个示例代码,展示如何使用@ResponseBody注解来响应JSON数据,并通过Ajax接收单个简单类型参数:

@RestController
public class ExampleController {
    @PostMapping("/example")
    public ResponseEntity<String> processExample(@RequestBody String data) {
        // 处理接收到的数据
        String result = "处理结果:" + data;
        return ResponseEntity.ok(result);
    }
}

processExample() 方法使用 @PostMapping 注解来处理POST请求,并使用 @RequestBody 注解来接收请求体中的数据。方法的参数类型是 String ,表示接收到的数据。

通过 ResponseEntity.ok(result) ,我们将处理结果作为响应体,并设置HTTP状态码为200(表示成功)。由于在类上使用了 @RestController 注解,方法的返回值将自动转换为JSON格式,并作为响应发送回客户端。

在前端使用Ajax发送请求时,可以使用 $.ajax$.post 等方法,并设置 dataType: 'json' 来指定接收的数据类型为JSON。例如:

$.ajax({
    url: '/example',
    type: 'POST',
    data: 'Hello',
    dataType: 'json',
    success: function(response) {
        console.log(response);
        // 处理响应数据
    }
});

上述代码中,我们发送了一个POST请求到 /example 路径,请求体中包含字符串数据"Hello"。通过设置 dataType: 'json' ,我们告诉Ajax请求接收JSON格式的响应数据。

3.2. 通过ajax接收实体类参数

如果你想通过Ajax接收实体类参数,并将响应以JSON格式返回,可以使用@ResponseBody注解来实现。在Spring MVC中,默认使用Jackson库进行JSON转换。

以下是一个示例代码,展示如何使用@ResponseBody注解来响应JSON数据,并通过Ajax接收实体类参数:

@RestController
public class ExampleController {
    @PostMapping("/example")
    public ResponseEntity<Result> processExample(@RequestBody Request request) {
        // 处理接收到的请求数据
        Result result = new Result("处理成功", request);
        return ResponseEntity.ok(result);
    }
}

processExample() 方法使用 @PostMapping 注解来处理POST请求,并使用 @RequestBody 注解来接收请求体中的数据。方法的参数类型是一个自定义的实体类 Request ,表示接收到的请求数据。

通过 ResponseEntity.ok(result) ,我们将处理结果作为响应体,并设置HTTP状态码为200(表示成功)。由于在类上使用了 @RestController 注解,方法的返回值将自动转换为JSON格式,并作为响应发送回客户端。

在前端使用Ajax发送请求时,可以使用 $.ajax$.post 等方法,并设置 dataType: 'json' 来指定接收的数据类型为JSON。例如:

$.ajax({
    url: '/example',
    type: 'POST',
    data: JSON.stringify({ name: 'John', age: 25 }),
    contentType: 'application/json',
    dataType: 'json',
    success: function(response) {
        console.log(response);
        // 处理响应数据
    }
});

上述代码中,我们发送了一个POST请求到 /example 路径,请求体中包含一个JSON对象,表示实体类参数。通过设置 contentType: 'application/json'dataType: 'json' ,我们告诉Ajax请求发送JSON格式的数据,并接收JSON格式的响应数据。

3.3. 通过ajax接收Map类型参数

如果你想通过Ajax接收Map类型参数,并将响应以JSON格式返回,可以使用@ResponseBody注解来实现。在Spring MVC中,默认使用Jackson库进行JSON转换。

以下是一个示例代码,展示如何使用@ResponseBody注解来响应JSON数据,并通过Ajax接收Map类型参数:

@RestController
public class ExampleController {
    @PostMapping("/example")
    public ResponseEntity<Map<String, Object>> processExample(@RequestBody Map<String, Object> data) {
        // 处理接收到的数据
        Map<String, Object> result = new HashMap<>();
        result.put("message", "处理成功");
        result.put("data", data);
        return ResponseEntity.ok(result);
    }
}

processExample() 方法使用 @PostMapping 注解来处理POST请求,并使用 @RequestBody 注解来接收请求体中的数据。方法的参数类型是 Map<String, Object> ,表示接收到的数据。

通过 ResponseEntity.ok(result) ,我们将处理结果作为响应体,并设置HTTP状态码为200(表示成功)。由于在类上使用了 @RestController 注解,方法的返回值将自动转换为JSON格式,并作为响应发送回客户端。

在前端使用Ajax发送请求时,可以使用 $.ajax$.post 等方法,并设置 dataType: 'json' 来指定接收的数据类型为JSON。例如:

$.ajax({
    url: '/example',
    type: 'POST',
    data: JSON.stringify({ key1: 'value1', key2: 'value2' }),
    contentType: 'application/json',
    dataType: 'json',
    success: function(response) {
        console.log(response);
        // 处理响应数据
    }
});

上述代码中,我们发送了一个POST请求到 /example 路径,请求体中包含一个JSON对象,表示Map类型参数。通过设置 contentType: 'application/json'dataType: 'json' ,我们告诉Ajax请求发送JSON格式的数据,并接收JSON格式的响应数据。

3.4. 通过ajax接收List类型参数

如果你想通过Ajax接收List类型参数,并将响应以JSON格式返回,可以使用@ResponseBody注解来实现。在Spring MVC中,默认使用Jackson库进行JSON转换。

以下是一个示例代码,展示如何使用@ResponseBody注解来响应JSON数据,并通过Ajax接收List类型参数:

@RestController
public class ExampleController {
    @PostMapping("/example")
    public ResponseEntity<List<String>> processExample(@RequestBody List<String> data) {
        // 处理接收到的数据
        List<String> result = new ArrayList<>();
        for (String item : data) {
            result.add("处理结果:" + item);
        }
        return ResponseEntity.ok(result);
    }
}

processExample() 方法使用 @PostMapping 注解来处理POST请求,并使用 @RequestBody 注解来接收请求体中的数据。方法的参数类型是 List<String> ,表示接收到的数据。

通过 ResponseEntity.ok(result) ,我们将处理结果作为响应体,并设置HTTP状态码为200(表示成功)。由于在类上使用了 @RestController 注解,方法的返回值将自动转换为JSON格式,并作为响应发送回客户端。

在前端使用Ajax发送请求时,可以使用 $.ajax$.post 等方法,并设置 dataType: 'json' 来指定接收的数据类型为JSON。例如:

$.ajax({
    url: '/example',
    type: 'POST',
    data: JSON.stringify(['item1', 'item2', 'item3']),
    contentType: 'application/json',
    dataType: 'json',
    success: function(response) {
        console.log(response);
        // 处理响应数据
    }
});

上述代码中,我们发送了一个POST请求到 /example 路径,请求体中包含一个JSON数组,表示List类型参数。通过设置 contentType: 'application/json'dataType: 'json' ,我们告诉Ajax请求发送JSON格式的数据,并接收JSON格式的响应数据。

精彩专栏推荐订阅:在下方专栏👇🏻
2023年华为OD机试真题(A卷&B卷)+ 面试指导
精选100套 Java 项目案例
面试需要避开的坑(活动)
你找不到的核心代码
带你手撕 Spring
Java 初阶

在这里插入图片描述