zoukankan      html  css  js  c++  java
  • @RequestBody注解用法

      做Java已经有8个多月了,但是基本没有学习过Java语言,因此在项目中写代码基本靠的是其他语言的基础来写Java代码,写出来的很多代码虽然能用,但是感觉很不地道,虽然从来没有同事说过,但是我自己觉得是,因为我经常用下中国象棋的套路去下国际象棋。

      在手头的项目用的SSM的框架,其中有用到Ajax的地方不少,方法是再简单不过了,在Ajax中对指定的URL提交参数,然后在Controller里通过request.getParameter()方法来接收参数。代码差不多就像下面的结构,Ajax的代码如下:

     1 function addRoomPic() {
     2    var housingPic = document.getElementById("housingPic").value;
     3    var remarks1    = document.getElementById("remarks1").value;
     4    
     5    if ( remarks1 == '' ) {
     6        return ;
     7    }
     8    
     9    document.getElementById("housingPic").value = "";
    10    document.getElementById("remarks1").value    = "";
    11    
    12    $.post(
    13        "${ctx}/housingresource/housingPics/ajaxSave",
    14        {housingPic: housingPic, remarks:remarks1},
    15        function (result) {
    16            // ...
    17        }
    18    );
    19 }

      Controller中代码如下:

    1 @RequestMapping(value = "ajaxSave")
    2 @ResponseBody
    3 public HousingPics ajaxSave(HttpServletRequest request) {
    4     HousingPics hrp = new HousingPics();
    5     hrp.setHousingPic(request.getParameter("housingPic"));
    6     hrp.setRemarks(request.getParameter("remarks"));
    7 
    8     // ....
    9 }

      这样的做法没有错,看着也比较直观,对于我这个用其他语言讨论来写Java代码的人来说,这样已经很好了。难道还有更好的方法吗?事实证明,无知会自大。

      在Spring中有一个注解可以方便的获取以Json形式提交的参数,并且可以把各个参数直接...直接...直接设置到一个对象中(犹豫的表达出自己不一定正确的用于),这个注解就是该文章标题中的@RequestBody了。修改项目中的代码,修改后的Controller如下:

    1 @RequestMapping(value = "ajaxSave")
    2 @ResponseBody
    3 public HousingPics ajaxSave(@RequestBody HousingPics hrp) {
    4     // ...
    5 }

      在此处,传递的两个参数已经被@RequestBody注解直接设置到对象中了,方法中实例化对象,接收参数的过程就免掉了。

      修改完Controller以后,直接进行测试,发现并没有得到预期的效果,那么在修改后的方法中下断。再次测试,但是竟然没有被断下,那么就在浏览器中进行调试,调试发现提示415报错,提示类似如下:

    Unsupported Media Type 415

      该问题因为传输的数据格式不太对,那么就修改Ajax请求的方式,代码如下:

     1 function addRoomPic() {
     2    var housingPic  = document.getElementById("housingPic").value;
     3    var remarks1    = document.getElementById("remarks1").value;
     4    
     5    if ( remarks1 == '' ) {
     6        return ;
     7    }
     8    
     9    document.getElementById("housingPic").value = "";
    10    document.getElementById("remarks1").value    = "";
    11    
    12    $.ajax({
    13        url:"${ctx}/housingresource/housingPics/ajaxSave",
    14        dataType:"json",
    15        contentType:"application/json",
    16        type:"post",
    17        data:JSON.stringify({housingPic: housingPic, remarks:remarks1}),
    18        success:function(result) {
    19            // ...
    20        }});
    21 }

      在代码中,另外增加了dataType和contentType两个Http的标识,对data数据进行了json格式的转换。修改后再次测试,这次OK了。

     

      相对的,在接收Json格式后需要设置入对象中使用@RequestBody注解,如果要将返回的对象转换为Json格式,需要使用@ResponseBody注解即可。


    我的微信公众号:“码农UP2U”

  • 相关阅读:
    win7每天出现taskeng.exe进程的解决方案
    hibernate插入中文字段时,无法插入数据库
    本页面用来演示如何通过JS SDK,创建完整的QQ登录流程,并调用openapi接口
    不同项目之间的通信
    404错误、405错误、500错误出错原因
    linux 下启动tomcat 时没有执行权限
    webservice文件上传下载(byte[] 实现方式)
    文件路径获取
    单个文件复制
    myeclipse svn重新定位 本地文件 svn 重新定位
  • 原文地址:https://www.cnblogs.com/tosser/p/8970730.html
Copyright © 2011-2022 走看看