SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象_zhuyu19911016520-CSDN博客

沙海
沙海
沙海
994
文章
2
评论
2021年4月28日12:06:12
评论
0 2338字阅读7分47秒
摘要

SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象

SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象

SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象_zhuyu19911016520-CSDN博客

闪耀的瞬间
2018-10-18 19:51:41
SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象_zhuyu19911016520-CSDN博客
1901

SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象_zhuyu19911016520-CSDN博客

收藏

4

分类专栏:
spring boot
java
SpringBoot 项目开发

版权

SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象_zhuyu19911016520-CSDN博客

往往有这么个需求,在新增用户时,页面以 ajax 方式把 user 对象数据提交到后台控制器上, 控制器方法中的参数以对象形式进行接收,这时就需要把json字符串自动转换为对象

在SpringBoot或SpringMvc中,有@ResponseBody 、@RequestBody 两个注解

  • @ResponseBody 注解是把数据以 json字符串的方式传给客户端(或通过produces自定义为其他格式)
  • @RequestBody 注解是把客户端传来的字符串数据转换为对象,但是需要 HttpMessageConverter 消息转换器

通过继承 WebMvcConfigurationSupport 类,重写configureMessageConverters方法,在项目中引用 fastjson库,它有一个FastJsonHttpMessageConverter的类,实现了HttpMessageConverter消息转换,我们只要设置支持转换那些类型即可,设置如下:

@Configuration
public class CustomeInterceptor extends WebMvcConfigurationSupport {
    //UTF-8 格式的数据
    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //创建fastJson消息转换器
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        List<MediaType> supportedMediaTypes = new ArrayList<>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
        supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
        supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XML);
        supportedMediaTypes.add(MediaType.TEXT_HTML);
        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
        supportedMediaTypes.add(MediaType.TEXT_XML);
        fastConverter.setSupportedMediaTypes(supportedMediaTypes);
        converters.add(fastConverter);
    }
}  
1234567891011121314151617181920212223

ajax提交字符串数据,contentType: ‘application/json’

<script type="text/javascript" th:inline="javascript">
        function saveMenu() {
            var data = JSON.stringify({id: "1",pId : "root",name:"菜单"})
            $.ajax({
                type : "post",
                url : "/saveMenu",
                data : data,
                contentType: 'application/json',
                success : function (result) {
                    console.log(result);
                }
            })
        }
    </script>
1234567891011121314

控制器接收,consumes = “application/json”

    @RequestMapping(value = "/saveMenu" , method = RequestMethod.POST , consumes = "application/json")
    @ResponseBody
    public String saveMenu(@RequestBody Tree tree){
        System.out.println("tree:" + JSON.toJSONString(tree));
        return "success";
    }
123456

method 表示接收 POST方式的请求 consumes="application/json"表示只处理请求头中Content-Type为application/json的请求 produces=“application/json” 表示向客户端返回Content-Type为application/json的数据

看一下调式效果,可以看出对象中的值,ajax过来的json字符串数据,已经自动转换为对象了 SpringBoot项目开发(二十三):Ajax Post数据到控制器方法,参数自动转换为对象_zhuyu19911016520-CSDN博客

继续阅读
weinxin
资源分享QQ群
本站是一个IT技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: