SpringMVC+AJAX+JSON

  在做一个ajax发送json到springmvc的控制层,控制层的对象中有一个List集合,ajax调用总是报415错误。发现了一个一直没有注意到的问题,借机记录一下。

(细节部分都忽略了,在最后的demo项目地址中会有。这里只写主要的步骤)

一、添加pom.xml依赖

  springmvc的pom.xml依赖在demo工程里都有,这里主要强调要添加以下两个依赖,否则@RequestBody和@ResponseBody这两个注解就不起作用。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.5.4</version>
</dependency>

二、Controller层

package org.hope.lee.controller;

import org.hope.lee.model.User;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.fastjson.JSONObject;

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("index")
    public ModelAndView toAddUserPage() {
        return new ModelAndView("addUser");
    }

    @RequestMapping(value = "/add",method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<String> addUser(@RequestBody User user) {
        JSONObject object = new JSONObject();
        object.put("success", "成功");
        return new ResponseEntity<>(object.toString(), HttpStatus.OK);
    }

}

三、JSP页面

  注意"②"处的代码,这种方式传递list参数给controller层种的@RequestBody对象是会报415错误的。我发现是因为"②"处addresses的value会多一个双引号

  {"name":"李四","age":"59","gender":"男","addresses":"[{\"addressName\":\"A区\"},{\"addressName\":\"B区\"}]"}。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="../static/js/jquery-1.11.0.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $("#btn").click(function() {
            var vname = $(‘#name‘).val();
            var vage = $(‘#age‘).val();
            var vgender = $("input[name=‘gender‘]:checked").val();
            var checkedParams = $("input:checkbox:checked");
            checked_val = [];
            for(k in checkedParams){
                if(checkedParams[k].checked)
                    checked_val.push(checkedParams[k].value);

            };
            var arr = new Array();
            for(var i = 0; i < checked_val.length; i++) {
                arr.push({‘addressName‘:checked_val[i]});
            }
            var arrs = JSON.stringify(arr);
            var params = {
                name : vname,
                age : vage,
                gender : vgender,
                addresses:arrs
            }

            var params2 = ‘{"name":\"‘+vname+‘\","age":‘+vage+‘,"gender":\"‘+vgender+‘\","addresses":‘+arrs+‘}‘ //如果有更好的办法,希望给我留言。
            console.log("params=" + JSON.stringify(params));
            console.log("params2=" + params2);
            $.ajax({
                url : "add",
                type : ‘POST‘,
                data : params2, //①
                //data:JSON.stringify(params), //②
                dataType : ‘json‘,
                contentType : "application/json;charset=utf-8",
                beforeSend: function() {
                },
                success : function(data) {
                    alert("保存成功");
                },
                error : function(XMLHttpRequest, textStatus, errorThrown) {
                    console.log(textStatus + "服务器异常,请稍后尝试!");
                }
            });
        });
    });
</script>
</head>
<body>
    姓名:<input type="text" id="name" /><br/>
    年龄:<input type="text" id="age" /><br/>
    性别:
    男:<input type="radio" checked="checked" name="gender" value="男"/>
    女:<input type="radio" name="gender" value="女"/><br/>
    地址:
    A区<input type="checkbox" id="checkbox" value="A区" />
    B区<input type="checkbox" id="checkbox" value="B区" />
    C区<input type="checkbox" id="checkbox" value="B区" /><br/>
    <button id="btn" >保存</button>
</body>
</html>

https://gitee.com/huayicompany/spring-learn/tree/master/springmvc-json

原文地址:https://www.cnblogs.com/happyflyingpig/p/8425399.html

时间: 2024-08-02 05:17:51

SpringMVC+AJAX+JSON的相关文章

springmvc ajax&amp;json处理

1 使用HttpServletResponse来处理--不需要配置解析器 @Controller public class AjaxController { @RequestMapping("/ajax") public void ajax(String name,HttpServletResponse resp) throws IOException{ if ("sgcc".equals(name)) { resp.getWriter().print("

SpringMVC Ajax请求时返回json中文字符串的乱码问题的解决方案

1.org.springframework.http.converter.StringHttpMessageConverter类是处理请求或相应字符串的类,并且默认字符集为ISO-8859-1,所以在当返回json中有中文时会出现乱码. 2.StringHttpMessageConverter的父类里有个List<MediaType> supportedMediaTypes属性,用来存放StringHttpMessageConverter支持需特殊处理的MediaType类型,如果需处理的Me

echarts3+ajax+json+SpringMVC+mybatis

最近使用的东西有点多,就不分开描述了,写在一起,也比较连贯 最近在写统计查询,所以用到了echarts3,用了几个小时看了下,还是不错的,主要准备好字符串,直接嵌入就可以 下面我描述下需求,这样在看代码还能有一些针对性 需求:实现对访问记录的统计,每天一个访问记录表,需要根据时间段进行查询(这里面就设计到联调查询),同时,在页面点击某一天的数据时,需要显示这一天每个时段的访问人数(这里面就有点意思了,用到了ajax+json) 好,先附一张截图 这就是最后显示的样子,下面来点实惠的,上代码~ 我

springMVC传递JSON格式数据

这两天在使用SpringMVC传递JSON数据格式,出现了各种令人头大的问题,但是功夫不负有心人,最后还是解决了问题.在这里记录下来供大家参考,如有不对,还请各位大侠指正. 在SpringMVC传递JSON数据格式需要加入两个jar包:com.springsource.org.codehaus.jackson-1.4.2.jar,com.springsource.org.codehaus.jackson.mapper-1.4.2.jar. 实体JavaBean:Person  具有tname,g

SpringMVC学习--json

简介 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便.比如:webservice接口,传输json数据. springmvc与json交互 @RequestBody和@ResponseBody      @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json.xml等格式的数据并绑定到controller方法的参

springMVC和Json的交互(就是后台解析json字符串和向前台传递json字符串的过程)

springMVC中和json的交互:主要分为两点,一是传递过来的是json字符串,springMVC会先进行解析,二是传递过来的是key:value那么springMVC可以不进行解析,这里的解析指的是json和java对象之间的转换 java对象:就是实体类的对象 首先先来看一张交互的图: 分析: 1.从这个图中我们可以看出来,前台请求的数据如果是json字符串,我们需要用@RequestBody先将json字符串转成java对象,然后前台传输的是java对象的时候就需要用@Response

SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转

SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-convert.html 目录 前言 现象 源码分析 实例讲解 关于配置 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-in

SpringMVC 返回JSON和JSP页面xml配置

SpringMVC 返回JSON和JSP页面xml配置 代码1: <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> <!-- Enables the Spring MVC @Controller programming model --> <annotation-driven /> <!-- Handles HTTP GET re

SpringMVC ajax 参数请求

1.采用@RequestParam或Request对象获取参数的方法 注:contentType必须指定为:application/x-www-form-urlencoded @ResponseBody @RequestMapping(value = "/insert", method = RequestMethod.POST) public HttpResult insert(HttpServletRequest request) { // @RequestParam("L