欢迎光临
我们一直在努力

SpringBoot学习中,如何实现Json数据交互的方法?

SpringBoot学习之Json数据交互的方法

SpringBoot学习中,如何实现Json数据交互的方法?

在Spring Boot中,JSON数据的交互主要通过Controller层来实现,本文将详细介绍几种常用的JSON数据交互方法,包括请求路径参数、Body参数、请求头参数及Cookie等,以下是详细内容:

一、获取参数的几种常用注解

1. 请求路径参数

请求路径参数一般用于GET请求,用于查询数据,采用明文进行传输,常见的注解有@PathVariable@RequestParam

1.1 使用@PathVariable获取路径参数

URL示例:http://localhost:4001/api/unit/1

后端代码:

    @RestController
    public class HelloController {
        @GetMapping("/hello/{id}/{name}")
        public String sayHello(@PathVariable("id") Integer id, @PathVariable("name") String name) {
            return "id:" + id + " name:" + name;
        }
    }

1.2 使用@RequestParam获取查询参数

URL示例:http://localhost:4001/api/unit?code=111

后端代码:

    @RestController
    public class HelloController {
        @GetMapping("/hello")
        public String sayHello(@RequestParam Integer id) {
            return "id:" + id;
        }
    }

2. Body参数

Body参数主要用于POST请求,推荐使用JSON格式传值,常用的注解是@RequestBody

2.1 使用@RequestBody接收JSON数据

前端代码(jQuery Ajax):

    $.ajax({
        type: 'POST',
        url: "/login",
        contentType: "application/json",
        data: JSON.stringify({"username": "Ed sheeran", "password": "123"}),
        success: function(data) {
            console.log(data);
        },
        error: function() {
            console.log("fucking error");
        }
    });

后端代码:

SpringBoot学习中,如何实现Json数据交互的方法?

    @RestController
    public class LoginController {
        @PostMapping("/login")
        public void login(@RequestBody Map<String, Object> map) {
            System.out.println(map.get("username"));
            System.out.println(map.get("password"));
        }
    }

3. 请求头参数以及Cookie

请求头参数和Cookie可以通过HttpServletRequest来获取。

3.1 获取请求头参数

后端代码:

    @RestController
    public class DemoController {
        @GetMapping("/demo3")
        public void demo3(HttpServletRequest request) {
            System.out.println(request.getHeader("myHeader"));
            for (Cookie cookie : request.getCookies()) {
                if ("myCookie".equals(cookie.getName())) {
                    System.out.println(cookie.getValue());
                }
            }
        }
    }

二、SpringBoot默认的JSON依赖与处理

1. SpringBoot默认对JSON的处理

Spring Boot默认使用Jackson作为JSON解析框架,我们可以通过@RestController@ResponseBody注解来简化JSON数据的返回。

1.1 实体类转换为JSON

实体类:

    public class SysUser {
        private String id;
        private String userName;
        private String password;
        // getters and setters omitted for brevity
    }

Controller:

    @RestController
    @RequestMapping("/jsonFormat1")
    public class SystemUser1Controller {
        @GetMapping("/user")
        public SysUser getUser() {
            return new SysUser("1", "小明", "xiaoming123");
        }
    }

2. 配置阿里巴巴fastjson

有时候我们可能会选择fastjson而不是Jackson,可以在pom.xml中添加fastjson依赖,并进行相应的配置。

2.1 pom.xml文件配置fastjson依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version1.2.76</version>
</dependency>

2.2 使用fastjson处理null值

SpringBoot学习中,如何实现Json数据交互的方法?

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FastJsonConfig {
    @Bean
    public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(SerializerFeature.WriteMapNullValue); // 保留null值
        config.setDateFormat("yyyyMMdd HH:mm:ss");
        converter.setFastJsonConfig(config);
        return converter;
    }
}

三、统一返回的数据结构

为了统一返回的数据结构,可以定义一个通用的返回结构,并在Controller中使用。

1. 定义统一的JSON结构

public class R {
    private int code;
    private String msg;
    private Object data;
    // getters and setters omitted for brevity
}

2. 改造Controller控制器

@RestController
@RequestMapping("/jsonFormat1")
public class SystemUser1Controller {
    @GetMapping("/user")
    public R getUser() {
        SysUser user = new SysUser("1", "小明", "xiaoming123");
        return new R(200, "success", user);
    }
}

四、相关问题与解答栏目

问题1:如何在Spring Boot中使用fastjson代替Jackson?

答:在Spring Boot中使用fastjson代替Jackson需要在pom.xml中添加fastjson依赖,并配置FastJsonHttpMessageConverter,具体步骤如下:

1、在pom.xml文件中添加fastjson依赖:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version1.2.76</version>
    </dependency>

2、创建一个配置类,配置FastJsonHttpMessageConverter:

    import com.alibaba.fastjson.serializer.SerializerFeature;
    import com.alibaba.fastjson.support.config.FastJsonConfig;
    import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    @Configuration
    public class FastJsonConfig {
        @Bean
        public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
            FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
            FastJsonConfig config = new FastJsonConfig();
            config.setSerializerFeatures(SerializerFeature.WriteMapNullValue); // 保留null值
            config.setDateFormat("yyyyMMdd HH:mm:ss");
            converter.setFastJsonConfig(config);
            return converter;
        }
    }

通过以上配置,即可在项目中使用fastjson代替Jackson进行JSON数据的处理。

问题2:如何处理JSON数据格式不正确导致的异常?

答:当JSON数据格式不正确时,Spring Boot会抛出HttpMessageNotReadableException异常,解决方法如下:

1、确保前端发送的JSON数据格式正确,并且与后端Java对象匹配,如果Java对象定义了一个phoneNumber属性,那么JSON数据中也应该包含这个属性。

2、在控制器中捕获异常,进行相应的处理,可以使用@ExceptionHandler注解来处理异常:

    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    import org.springframework.http.ResponseEntity;
    import org.springframework.http.HttpStatus;
    @RestControllerAdvice
    public class GlobalExceptionHandler {
        @ExceptionHandler(HttpMessageNotReadableException.class)
        public ResponseEntity<String> handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
            return new ResponseEntity<>("Invalid JSON format: " + e.getMessage(), HttpStatus.BAD_REQUEST);
        }
    }

以上内容就是解答有关“SpringBoot学习之Json数据交互的方法”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《SpringBoot学习中,如何实现Json数据交互的方法?》
文章链接:https://yuyunkj.com/article/9264.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发