zoukankan      html  css  js  c++  java
  • Spring Boot @DeleteMapping(转)

    Spring Boot @DeleteMapping

    使用DELETE方式进行交互
    说明:ResponseData为自定义返回体{String code, String msg, List<?> data}
               PollutionData 为一个entity  属性部分包含{String id, String name}
               CodeEnum、MsgEnum为自定义枚举类,定义了一些常量
               两种方式皆测试过
               环境:win7+idea2018.2+jdk10.0.2+springboot  前端编辑工具为hbuilder
    两种方式:
    1、
     
    //方法一 使用POST+ _method:"DELETE" + filter(springboot不需要我们配置) 
    //这里的传输对象为json对象,后台直接接受
    var r=confirm("方法一:确认删除该条数据?");
    if(r){
        //var data = {_method:"DELETE", id:"456456",name:"征集"};
        var data = {_method:"DELETE"};//_method:"DELETE"必须,其他属性看你需求
        $.ajax({
            url:"http://192.168.2.116:8080/pollution/delete/1786vdsds863",
            type:"POST",
            data:data,
            dataType:"json",
            success:function(result){
                alert(result.msg);
            }
    
        });        
    }
     
     
    @DeleteMapping("/pollution/delete/{id}")
    public ResponseData deletePollutionById(@PathVariable("id")String id, PollutionData data){
        System.out.println(id);
        System.out.println(data);
        return new ResponseData(CodeEnum.SUCCESS.getCode(),MsgEnum.SUCCESS.getMsg(),null);
    }
     

    2、

     
    //方法二 使用DELETE请求  
    //这是的传输对象为json字符串  后台使用@RequestBody注解解析该字符串并将字符串映射到对应实体上
    var r=confirm("方法二:确认删除该条数据?");
    if(r){
        var id = "123133";
        var jsonstr = { id: id,
                       name: "12345"};
        console.log(jsonstr);
        $.ajax({
            url:"http://192.168.2.116:8080/pollution/delete/" + id,
            type:"DELETE",
            contentType:"application/json",//设置请求参数类型为json字符串
            data:JSON.stringify(jsonstr),//将json对象转换成json字符串发送
            dataType:"json",
            success:function(result){
                alert(result.msg);
            }
    
        });        
    }
    
    /**如果不需要传递参数,可以不写下面的几项
    * contentType:"application/json",//设置请求参数类型为json字符串
      data:JSON.stringify(jsonstr),//将json对象转换成json字符串发送
      dataType:"json",
    */
     
     
    @DeleteMapping("/pollution/delete/{id}")
    public ResponseData deletePollutionById(@PathVariable("id")String id, @RequestBody PollutionData data){
        System.out.println(id);
        System.out.println(data);
        return new ResponseData(CodeEnum.SUCCESS.getCode(),MsgEnum.SUCCESS.getMsg(),null);
    }
     

    参考:https://blog.csdn.net/liuyuanjiang109/article/details/78972644

     
     
     

      1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。

      2、

        通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
        例如说以下情况:
        $.ajax({
            url:"/login",
            type:"POST",
            data:'{"userName":"admin","pwd","admin123"}',
            content-type:"application/json charset=utf-8",
            success:function(data){
              alert("request success ! ");
            }
        });

        @requestMapping("/login")
        public void login(@requestBody String userName,@requestBody String pwd){
          System.out.println(userName+" :"+pwd);
        }
        这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
          String userName;
          String pwd;
        那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上
        需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。

     3、

        在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式

        不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在
        特殊情况下才会使用,
        例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式

    分类: springMVC
    标签: @requestBody
    好文要顶 关注我 收藏该文
    7
    4
     
    « 上一篇:jQuery中$.post()的使用
    » 下一篇:@responseBody注解的使用
    posted @ 2016-08-15 20:51 既然琴瑟起 阅读(90556) 评论(5) 编辑 收藏

    #1楼 2018-02-28 16:53 | 娜娜娜娜小姐姐  
    @requestBody String userName,@requestBody String pwd
    两个参数用postman测试时,Json格式怎么写?
    #2楼 2018-07-25 11:19 | miaoch  
    转成实体类必须引入com.fasterxml.jackson.core包
    否则会报415错误。
    还有一个问题 我测试 @RequestBody userName pwd
    是无效的,会报错。
    个人感觉一个请求只能有一个@RequestBody,并且就是指整个内容(即使我只写一个pwd,pwd也是赋予了整个json)。
    不知道是我搞错了还是什么,希望博主能重新解答一下。
    有点怀疑博主是不是搞混了@RequestParam和@RequestBody
    #3楼 2018-08-14 15:43 | wishingpep  
    ajax正确的写法是
    contentType:"application/json charset=utf-8",
    而不是
    content-type:"application/json charset=utf-8",
    #4楼 2018-09-14 13:28 | 白棱镜  
    @ miaoch
    只能有一个哈
    #5楼 2018-11-04 18:21 | 行走的老熊  
    学习了,谢谢
     

    1、

      @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML

      数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

    2、  

      @RequestMapping("/login")
      @ResponseBody
      public User login(User user){
        return user;
      }
      User字段:userName pwd
      那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

      效果等同于如下代码:
      @RequestMapping("/login")
      public void login(User user, HttpServletResponse response){
        response.getWriter.write(JSONObject.fromObject(user).toString());
      }

    浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ff906317011/article/details/78552426

    博主说:首先,大家在使用SSM框架进行web开发的时候,经常会在Ctrl层遇到@RequestMapping、@ResponseBody以及@RequestBody这三个参数,博主就以自己在项目开发中总结的一些知识点浅谈一下三者之间微妙的关系。

    1.@RequestMapping

    国际惯例先介绍什么是@RequestMapping,@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法,此处需注意@RequestMapping用在类上可以没用,但是用在方法上必须有

    例如:

    @Controller
    //设置想要跳转的父路径
    @RequestMapping(value = "/Controllers")
    public class StatisticUserCtrl {
        //如需注入,则写入需要注入的类
        //@Autowired
    
                // 设置方法下的子路经
                @RequestMapping(value = "/method")
                public String helloworld() {
    
                    return "helloWorld";
    
                }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    其原理也非常好了解,其对应的 action 就是“ (父路径) controller/(父路径下方法路经)method ”。因此,在本地服务器上访问方法 http://localhost:8080/controller/method 就会返回(跳转)到“ helloWorld.jsp ”页面。

    说到这了,顺便说一下 @PathVariable 注解,其用来获取请求路径(url )中的动态参数。

    页面发出请求:

    function login() {
        var url = "${pageContext.request.contextPath}/person/login/";
        var query = $('#id').val() + '/' + $('#name').val() + '/' + $('#status').val();
        url += query;
        $.get(url, function(data) {
            alert("id: " + data.id + "name: " + data.name + "status: "
                    + data.status);
        });
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    例如:

    /**
    * @RequestMapping(value = "user/login/{id}/{name}/{status}") 中的 {id}/{name}/{status}
    * 与 @PathVariable int id、@PathVariable String name、@PathVariable boolean status
    * 一一对应,按名匹配。
    */
    
    @RequestMapping(value = "user/login/{id}/{name}/{status}")
    @ResponseBody
    //@PathVariable注解下的数据类型均可用
    public User login(@PathVariable int id, @PathVariable String name, @PathVariable boolean status) {
    //返回一个User对象响应ajax的请求
        return new User(id, name, status);
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    @ResponseBody

    @Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。
    作用:
    该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
    使用时机:
    返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

    当页面发出异步请求:

    function login() {
        var datas = '{"username":"' + $('#username').val() + '","userid":"' + $('#userid').val() + '","status":"' + $('#status').val() + '"}';
        $.ajax({
            type : 'POST',
            contentType : 'application/json',
            url : "${pageContext.request.contextPath}/user/login",
            processData : false,
            dataType : 'json',
            data : datas,
            success : function(data) {
                alert("userid: " + data.userid + "username: " + data.username + "status: "+ data.status);
            },
            error : function(XMLHttpRequest, textStatus, errorThrown) {
                alert("出现异常,异常信息:"+textStatus,"error");
            }
        });
    };
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    例如:

    @RequestMapping(value = "user/login")
    @ResponseBody
    // 将ajax(datas)发出的请求写入 User 对象中,返回json对象响应回去
    public User login(User user) {   
        User user = new User();
        user .setUserid(1);
        user .setUsername("MrF");
        user .setStatus("1");
        return user ;
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    异步获取 json 数据,加上 @Responsebody 注解后,就会直接返回 json 数据。

    @RequestBody

    @RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

    作用:

    1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
    2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

    使用时机:

    A) GET、POST方式提时, 根据request header Content-Type的值来判断:

    application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
    multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
    其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);

    B) PUT方式提交时, 根据request header Content-Type的值来判断:

    application/x-www-form-urlencoded, 必须;multipart/form-data, 不能处理;其他格式, 必须;

    说明:request的body部分的数据编码格式由header部分的Content-Type指定;

    例如:

    @RequestMapping(value = "user/login")
    @ResponseBody
    // 将ajax(datas)发出的请求写入 User 对象中
    public User login(@RequestBody User user) {   
    // 这样就不会再被解析为跳转路径,而是直接将user对象写入 HTTP 响应正文中
        return user;    
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    最后感谢walkerjong的spring源码支持,如有问题请大家多多评论,你的建议是我成长道路中必不可少的养分,还是那句话,我们不止会New!

  • 相关阅读:
    keypress事件
    input输入框(blur,change,focus)
    click点击以后添加新class,删除其余同名class
    强制数组并且匹配Array
    模拟鼠标事件
    简单的form操作
    鼠标滚轮事件(mousewheel、DOMMouseScroll)
    事件委托技术
    从程序员到项目经理:项目经理必须懂一点“章法”
    JavaScript项目优化总结
  • 原文地址:https://www.cnblogs.com/yasepix/p/9913531.html
Copyright © 2011-2022 走看看