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

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

  • 相关阅读:
    有关vue中组件间的传值问题
    有关vue中同一个组件配置不同的路由产生的系列
    有关vue中用element ui 中的from表单提交json格式总是有冒号的问题解决办法
    有关element ui 中的switch在表格多列显示中全部为关闭或开启
    有关element ui中的 switch在表格中使用多个时互相不收影响的问题
    【PostgreSQL-9.6.3】修改监听的IP和端口
    【Oracle】truncate分区表
    【Oracle】append
    【PostgreSQL-9.6.3】函数(3)--日期和时间函数
    【PostgreSQL-9.6.3】函数(2)--字符型函数
  • 原文地址:https://www.cnblogs.com/youcong/p/9348314.html
Copyright © 2011-2022 走看看