zoukankan      html  css  js  c++  java
  • Springboot后端接口开发

    1、技术概述

    现在大多数Web项目都采取前后端分离的方法,用Springboot后端获取前端传递的数据并进行业务逻辑处理和接口封装,是一项既简单又重要的操作。

    2、技术详述

    (1)确定传输方式

    用POST提交不同传输方式获取参数的方式不同。

    前端Content-Type JSON对象/字符串 后端参数获取方法
    application/x-www-form-urlencoded 对象 @RequestParam 或者Servlet
    application/json 字符串 @RequestBody

    (2)定义规范的数据结构

    建议最好自行定义一个规范的数据交互结构,既美观又实用

    public class JsonUtil {
    	public static HashMap<String, Object> success(Map<String, Object> data) {
    		HashMap<String, Object> res = new HashMap<>();
    		res.put("code", ResCode.SUCCESS.getCode());     //正确码
    		res.put("msg", "");                             //备注消息
    		res.put("data", data);                          //数据
    		return res;
    	}
    

    效果如下:

    {
        code: 200, //响应代码
        msg: '', //消息,正常时不带此条,出错时附加错误信息
        data: {} //数据
    }
    

    (3)GET请求

    get请求一般用于查询数据,采用明文进行传输,一般用来获取一些无关用户信息的数据
    请求方式一般通过url传参,如http://localhost:8080/hello
    @GetMapping 组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写
    一个简单的例子:

    @RestController
    public class HelloController {
    	@RequestMapping("/hello")
    	public String hello() {
    		return "Hello Spring Boot!";
    	}
    }
    

    结果如下:

    也可以在url后面带上参数,如http://localhost:8080/config?id=1,可以使用@RequestParam注解获取指定参数值。
    代码如下:

    @RestController
    public class UserController {
        @Autowired
        private UserService userService;
        @Autowired
        private ImageTypeService imageTypeService;
        @Autowired
        private CollectionService collectionService;
    
        @RequestMapping(value = "/config",produces = "application/json;charset=utf-8",method= RequestMethod.GET)
        @ResponseBody
        public ResponseEntity<Map<String, Object>> getConfig(@RequestParam("id") Integer id){
            User user = userService.getUserById(id);
            List<String> imageTypeList = imageTypeService.getNameByUId(id);
            List<String> collectionList = collectionService.getNameByUId(id);
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("name",user.getName());
            map.put("imageType",imageTypeList);
            map.put("collection",collectionList);
            return ResponseEntity.ok(JsonUtil.success(map));
        }
    }
    

    结果如下:

    (4)POST请求

    post请求一般用于修改数据,将前端的数据传送给后端,并返回指定内容。
    当Ajax以application/x-www-form-urlencoded格式上传即使用JSON对象,后台只能使用@RequestParam 或者Servlet获取参数。 当Ajax以application/json格式上传即使用JSON字符串,后台可以使用@RequestBody或者@RequestParam获取。
    @PostMapping 组合注解,是 @RequestMapping(method = RequestMethod.POST) 的缩写
    后端代码如下:

    public class UserController {
        @Autowired
        private UserService userService;
        @Autowired
        private ImageTypeService imageTypeService;
        @Autowired
        private CollectionService collectionService;
    
        @RequestMapping(value = "/config",produces = "application/json;charset=utf-8",method= RequestMethod.POST)
        @ResponseBody
        public ResponseEntity<Map<String, Object>> postConfig(@RequestBody Map<String,Object> map){
            User user = new User();
            int id = (int)map.get("id");
            user.setId(id);
            user.setAmonutPerDay((int)map.get("amonutPerDay"));
            user.setBookId((int)map.get("bookId"));
            user.setTimesToChangeBackground((int)map.get("timesToChangeBackground"));
            user.setDurationKeepAfterRecite((int)map.get("durationKeepAfterRecite"));
            user.setTipsDuration((int)map.get("tipsDuration"));
            List<String> imageTypeList = (List<String>)map.get("imageList");
            List<String> collectionList = (List<String>)map.get("collection");
            userService.update(user);
            imageTypeService.update(imageTypeList,id);
            collectionService.update(collectionList,id);
            return ResponseEntity.ok(JsonUtil.success());
        }
    }
    

    前端代码:

    function a(){
            $.ajax({
                url:"/config",
                type:"post",
                contentType: "application/json;charset=utf-8",
                data:JSON.stringify({
                    "id":1,
                    "amountPerDay":100,
                    "bookId":1,
                    "timesToChangeBackground": 1,
                    "durationKeepAfterRecite": 1500,
                    "tipsDuration": 1000,
                    "imagesType": ['aa','abc','ade','cc'],
                    "collection": ['admin', 'apple']
                })
            })
        }
    

    结果展示:

    3、技术使用中遇到的问题和解决过程

    1. 从前台传输的数据为空
      解决:@RequestBody或@RequestParam使用有误,首先要注意传输方式,其次要注意两者的用法及读取数据的格式有区别。
    2. @RequestBody与@ResponseBody的区别
      解决:@RequestBody的作用是将前端传来的json格式的数据转为自己定义好的javabean对象,不能写在方法名上方。@ResponseBody的作用是将后端以return返回的javabean类型数据转为json类型数据。

    4、总结

    后端接口开发算是一个最基本最简单的技术,但是它的意义非同一般,是Web项目能够实现前后端分离的关键技术。想要成为一名优秀的后端工程师,还需要更加努力学习。

    5、参考文献、参考博客

    CSDN博客:SpringBoot实现前后端数据交互、json数据交互、Controller接收参数的几种常用方式
    CSDN博客:Spring中的注解@RequestBody和@ResponseBody的使用和区别

  • 相关阅读:
    python实例26[查询修改文件的属性]
    [SCM]源码管理 VisualSVN Server+TortoiseSVN
    持续集成之“依赖管理”
    Spoon:在“云”上运行桌面应用程序
    数字签名的验证
    判断Linux/Unix为32位或64位
    持续集成理论和实践的新进展
    [SCM]源码管理 SVN Server
    [BuildRelease Management]Parabuild
    为VM增加磁盘空间
  • 原文地址:https://www.cnblogs.com/Dreamer2020/p/13169957.html
Copyright © 2011-2022 走看看