zoukankan      html  css  js  c++  java
  • SSM框架之RestFul示例

    演示环境:maven+Spring+SpringMVC+MyBatis Plus或MyBatis都行+JDK8

    JDK7我想应该没有问题,原因是用的基本都是JDK6或者JDK7的相关特性。

    当然了,JDK10现在都有了,新的特性出现的同时和对一些原有的JAVA类性能升级等。

    RestFul是一种架构风格,对应资源请求分门别类管理。

    万物皆资源,可以这么理解。

    对应不同的请求有不同的请求方式,比如

    如果是获取资源列表,可通过GET请求获取对应的资源列表信息;

    如果是删除某个资源,可以使用Delete请求;

    如果是修改某个资源,可以使用Put请求;

    如果是增加某个资源,可以使用POST请求;

    日常比较常用的也就这么几个,对于SpringMVC,你可以尽情的使用注解,例如@PostMapping、@GetMapping、@PutMapping、@DeleteMapping等。

    同时也可以使用@RequestMapping中的Method定义呢需要的请求方式。当然了,我个人比较推崇使用对应的请求注解。

    如果按照之前的方式开发,很少分请求对应资源。

    另外,或许有人疑问为什么要这样做?

    前面我就说过,为了更好的管理资源,遵守RestFul架构风格。

    当然了,还有就是用请求可以区分资源,例如获取、增加、删除、修改等。当然了,全部用Post也可以做。至于为什么用Post,网上博客一大把。

    至于Delete、PUT,它们都和Post一样,不能通过F12获取具体的信息,除非通过POSTMAN或Jmeter等工具可以获取,再不济使用Java封装的一个HTTP类也可以做到。

    使用GET的目的因为,通过GET获取数据只是查而已,并不对数据修改,对于安全性而言的话,没那么高。而Delete、Post、Put的话,对于数据库直接涉及删、增、改了,所以一定要特别注意安全性方面。

    下面演示了几个示例:

    1.GET

    /**
         * 查询公司编码获得该公司相关的所有资源
         * @param companyCode
         * @return
         */
        @GetMapping(value="/selectCompanyCodeGetResourceInfo",produces="application/json;charset=utf-8")
        @ApiOperation(value="查询公司编码获得该公司相关的所有资源",httpMethod="GET",notes="获取资源状态数量信息,个体用户专用")
        public JSONObject selectCompanyCodeGetResourceInfo(String companyCode,String status){
            JSONObject json = new JSONObject();    
            
            System.out.println("companyCode:"+companyCode);
            System.out.println("status:"+status);
            //条件查询
            EntityWrapper<Resource> resourceSelectCondition = new EntityWrapper<Resource>();
            resourceSelectCondition.eq("company_code", companyCode);
            resourceSelectCondition.eq("status", status);
            List<Resource> resourceList = resourceService.selectList(resourceSelectCondition);
            
            
            if(status.equals(CommonEnum.ISSUE)) {
                json.put("resourceList",resourceList);
                json.put("returnMsg", CommonEnum.ISSUE);
            }else if(status.equals(CommonEnum.NO_ISSUE)) {
                json.put("resourceList",resourceList);
                json.put("returnMsg", CommonEnum.NO_ISSUE);
            }else {
                json.put("resourceList",resourceList);
                json.put("returnMsg","error");
            }
        
            
            return json;
            
        }

    js代码

    //查询公司编码获得该公司相关的所有资源
    function selectCompanyCodeGetResourceInfo(companyCode,status){
        $.ajax({
            url:ZL.url.api.selectCompanyCodeGetResourceInfo,
            type:"GET",
            data : {"companyCode":companyCode,"status":status},
            dataType : 'json',
            success:function(data){
            
                 //将从后台获取的List装入apps中
                 var apps = data.resourceList;
                         
                   
                 
                
                 new Vue({
                          el:"#markingCenter",
                          data:
                          {
                            items:apps                  
                          }
                      });
                 
                 
        
            },error:function(){
                alert("失败");
            }
        });
        
    }

    2.POST

        /**
         * 个人身份认证
         * @param personAuthDto
         * @return
         */
        @PostMapping(value="/personal_Auth",produces="application/json;charset=utf-8")
        @ApiOperation(value="个人身份认证",httpMethod="POST",notes="个人身份认证")
        public JSONObject personal_Auth(@RequestBody PersonAuthDto personAuthDto) {
            
            JSONObject json = new JSONObject();
            
            logger.info("---start---");
            logger.info("userId:"+personAuthDto.getUserId());
            logger.info("identity:"+personAuthDto.getIdentity());
            logger.info("remark:"+personAuthDto.getRemark());
            logger.info("---end---");
            //身份证合法验证
            boolean validIdentity = IdcardUtil.isValidCard(personAuthDto.getIdentity());
            
            if(validIdentity) {
                
                try {
                    
                    Date date = DateUtil.date();
                    MarketIdentity auth = new MarketIdentity();
                    auth.setUserId(personAuthDto.getUserId());
                    auth.setCreateTime(date.toString());
                    auth.setIdentityId(personAuthDto.getIdentity());
                    auth.setRemark(personAuthDto.getRemark());
                    auth.setType(CommonEnum.PERSON_AUTH);
                    auth.setResult(CommonEnum.WAIT_AUTH);
                    
                    //调用新增认证信息方法
                    boolean isAuth = marketIdentityService.insert(auth);
                        
                    if(isAuth) {
                        
                        json.put("returnMsg","已提交认证申请,等待审批");
                        json.put("returnCode","000000");
                    
                    }else {
                        
                        json.put("returnMsg","提交认证申请失败");
                        json.put("returnCode","111111");
                    }
    
                }catch (Exception e) {
                    
                    e.printStackTrace();
                    
                    json.put("returnMsg","其他异常");
                    json.put("returnCode","222222");
                }
            
            }else {
                
                json.put("returnMsg","身份证认证不合法");
                json.put("returnCode","333333");
            }
        
            return json;    
            
        }

    js代码

    $(function(){
        
        $("#personal_auth").click(function(){
            var userId = $("#userId").val();
            var identity = $("#person_identity").val();
            var remark = $("#person_remark").val();
            var data = {
                    userId:userId,
                    identity:identity,
                    remark:remark
            }
            
            if(remark==null || remark==""){
                layui.use('layer', function(){
                      var layer = layui.layer;
                      
                      layer.msg("请填写认证理由",{icon: 5});
                    });
                
                return false;
            }else{
                $.ajax({
                    url :ZL.url.api.personal_Auth,
                    type : "POST",
                    contentType: 'application/json;charset=utf-8',
                    data : JSON.stringify(data),
                    dataType : 'json',
                    success : function(data){
                        
                        if(data.returnCode=="000000"){
                            layui.use('layer', function(){
                                  var layer = layui.layer;
                                  
                                  layer.msg(data.returnMsg,{icon: 1});
                                });  
                            setTimeout(() => {
                                closeLayui();
                            }, 800);
                        }else if(data.returnCode=="111111"){
                            layui.use('layer', function(){
                                  var layer = layui.layer;
                                  
                                  layer.msg(data.returnMsg,{icon: 5});
                                });
                        }else if(data.returnCode=="222222"){
                            layui.use('layer', function(){
                                  var layer = layui.layer;
                                  
                                  layer.msg(data.returnMsg,{icon: 5});
                                });
                        }else if(data.returnCode=="333333"){
                            layui.use('layer', function(){
                                  var layer = layui.layer;
                                  
                                  layer.msg(data.returnMsg,{icon: 5});
                                });
                        }
                    
                    },
                    error:function(XMLHttpRequest, textStatus, errorThrown){
                         alert(XMLHttpRequest.status);
                         // 状态
                         alert(XMLHttpRequest.readyState);
                         // 错误信息   
                         alert(textStatus);
                        
                    }
                });
                
                return true;
            }
    
            
        });
    });

    3.DELETE

    @DeleteMapping(value="test002")
        public JSONObject test002(String userCode) {
            JSONObject json = new JSONObject();
            logger.info("userCode:"+userCode);
            boolean b = userService.deleteById(userCode);
            if(b) {
                json.put("returnMsg", "success");
                json.put("returnCode", "00000");
            }else {
                json.put("returnMsg", "error");
                json.put("returnCode", "111111");
                
            }
        
            return json;
        }

    js代码

        var userCode="5";
        $.ajax({
            url:"sysUser/test002",
            type:"DELETE",
            data:{"userCode":userCode},
            dataType : 'json',
            success:function(data){
            alert(data.returnCode);
            },error:function(XMLHttpRequest, textStatus, errorThrown){
                 alert(XMLHttpRequest.status);
                 // 状态
                 alert(XMLHttpRequest.readyState);
                 // 错误信息   
                 alert(textStatus);
            }
        });

    4.PUT

    @PutMapping(value="test002")
        public JSONObject test002(@RequestBody SysUser sysUser) {
            JSONObject json = new JSONObject();
            boolean b = userService.updateById(sysUser);
            if(b) {
                json.put("returnMsg", "success");
                json.put("returnCode", "00000");
            }else {
                json.put("returnMsg", "error");
                json.put("returnCode", "111111");
                
            }
        
            return json;
        }

    js代码

    var data = {
                userCode:"2",
                loginCode:"123456"
        }
        
        $.ajax({
            url:"/sysUser/test002",
            type:"PUT",
            contentType: 'application/json;charset=utf-8',
            data:JSON.stringify(data),
            dataType : 'json',
            success:function(data){
            alert(data.returnCode);
            },error:function(XMLHttpRequest, textStatus, errorThrown){
                 alert(XMLHttpRequest.status);
                 // 状态
                 alert(XMLHttpRequest.readyState);
                 // 错误信息   
                 alert(textStatus);
            }
        });

    另外补充说说403、415、500和ajax错误

    ajax错误:

    出现这个错误的原因,很简单语法错误,不过越简单有的时候往往容易犯低级错误,不过通过浏览器f12调试即可。特别是中小型公司的朋友们,往往兼任多个职位,又是前端,又是后端还有兼任测试和运维。

    掌握合理的调试技巧和方式,另外还有有一点要注意,单元测试和POSTMAN或Jmeter测试一定要及时,这样真的可以避免很多问题的。

    2.关于这个403

    403问题通常是跨域请求问题,下面这个链接可以作为解决方案:

    https://blog.csdn.net/qq_25152183/article/details/53158222

    3.415错误码

    这个错误码出现的原因是比如,我要修改某条数据时,我前端ajax不存在一个叫contentType: 'application/json;charset=utf-8'和使用这个方法JSON.stringify(data),而后台却加上了一@RequestBody,这个注解也就声明了你前台传的必须是json,否则会出现这个问题

    4.500

    500的问题多的多,这里只列举空指针,这个空指针问题,还是源于修改,前台加上了contentType: 'application/json;charset=utf-8'和使用这个方法JSON.stringify(data),但后台却没有加上@RequestBody,导致参数无法接收,从而导致空指针。通常情况下,用@RequestBody修饰对象。如果只是简单的三个以内或者三个参数可以直接使用{"param1":param1,"param2":param2,"param3":param3}这种方式,如果多于三个以上建议使用数据传输对象的形式,即DTO。

     小结:

    时不时,还是要抽点时间学习学习理论方面的,读读一些国外有名的计算机博士文章,虽然说不一定完全读的明白,但是可以开开眼界,或者从某些片段中会有一些意想不到的收获。

    RestFul架构风格论文:https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

    大家有时间可以读读,读完后,说不定看看其他的博友们分享的相关文章,会有一种非常特别的感觉。

  • 相关阅读:
    LightOJ 1132 Summing up Powers(矩阵快速幂)
    hdu 3804 Query on a tree (树链剖分+线段树)
    LightOJ 1052 String Growth && uva 12045 Fun with Strings (矩阵快速幂)
    uva 12304 2D Geometry 110 in 1! (Geometry)
    LA 3263 That Nice Euler Circuit (2D Geometry)
    2013 SCAUCPC Summary
    poj 3321 Apple Tree (Binary Index Tree)
    uva 11796 Dog Distance (几何+模拟)
    uva 11178 Morley's Theorem (2D Geometry)
    动手动脑
  • 原文地址:https://www.cnblogs.com/youcong/p/9348314.html
Copyright © 2011-2022 走看看