Spring post json, 并在服务器端将接收到的json装配成Java Bean

遇到过--415:不支持的媒体类型,400:Bad Request,404:Not Found。

首先,不需要那些在dispatcher-servlet.xml里的配置文件,比如:

<!-- 配置ViewResolver。 可以用多个ViewResolver。 使用order属性排序。 InternalResourceViewResolver放在最后。 -->
    <bean
            class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json" />
                <entry key="xml" value="application/xml" />
                <entry key="htm" value="text/html" />
            </map>
        </property>

        <property name="defaultViews">
            <list>
                <!-- JSON View -->
                <bean
                        class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                </bean>
            </list>
        </property>
        <property name="ignoreAcceptHeader" value="true" />
    </bean>

(这个的name="mediaTypes",和name="ignoreAcceptHeader"也deprecated,在Spring3.2.17不鼓励使用,在Spring4里不能用。)

或者是:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html; charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html; charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>

或者是:

 <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="prefixJson" value="false"/>
        <property name="supportedMediaTypes" value="application/json"/>
    </bean>

或者是:

    <!-- @:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
   <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    </bean>
    <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean
                        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
            </list>
        </property>
    </bean>

或者是:

<bean
            class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJackson2HttpMessageConverter" />
            </list>
        </property>
    </bean>
    <bean id="mappingJackson2HttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
                <value>text/json;charset=UTF-8</value>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
    </bean>

以上这些在网上找的配置文件均不需要。

并且不需要这些jar包:

也不需要

在Controller里也不需要headers = "application/json"或者produces="application/json":

    @RequestMapping(value = "regist",method = RequestMethod.POST,headers = "application/json",produces="application/json")
    @ResponseBody

前端也不需要在form 表单上加enctype='application/json':

<form enctype='application/json' id="form" name="form" method="post">

 

##########################        分割线            #################################

以上这些都不需要。

前端:

post的数据必须要

JSON.stringify(data)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <script type="application/javascript" src="/js/jquery-2.2.4.min.js"></script>
    <title>Register</title>
<script type="application/javascript">
        $.fn.serializeObject = function()
        {
            var o = {};
            var a = this.serializeArray();
            $.each(a, function() {
                if (o[this.name]) {
                    if (!o[this.name].push) {
                        o[this.name] = [o[this.name]];
                    }
                    o[this.name].push(this.value || '');
                } else {
                    o[this.name] = this.value || '';
                }
            });
            return o;
        };

        function postjson() {
            var data = {};
            $("#form").serializeArray().map(function(x){data[x.name] = x.value;});
            /*var json = {
                        uid: 10,
                        uname: "zzyo",
                        upass: "zzyo",
                        email: "zzyo",
                        mac: "zzyo"
                    }; //序列化成JSON*/
            $.ajax({
                url : "regist",
                type : "post",
                dataType : "json",
                contentType : "application/json; charset=utf-8",
                data : JSON.stringify(data),
                success : function(text) {
                    //window.location.href = "main/frame";enctype='application/json' action="regist"
                }
            });
        }
    </script>
</head>
<body>
<form id="form" name="form" method="post">
    ID:<input type="text" name="uid"><br>
    用户名:<input type="text" name="uname"><br>
    密码:<input type="text" name="upass"><br>
    Email:<input type="text" name="email"><br>
    MAC:<input type="text" name="mac"><br>
    <input type="button" value="提交" onclick="postjson()"/>
</form>

</body>
</html>

Controller:

必须使用@ResponseBody 注解

    @RequestMapping(value = "regist",method = RequestMethod.POST)//,headers = "application/json",produces="application/json"
    @ResponseBody
    public String regist(ModelMap map,@RequestBody UsersEntity usersEntity)
    {
        map.addAttribute("data",usersEntity);
        System.out.println(usersEntity.toString());
        return "success";
    }

并且据说在前端post的json数据key(即input的name)必须要和Java Bean的属性名一样,不过没有试过。

092319_dAiW_2744235.png

网上资料:

092958_m9uC_2744235.png

并且好像Java Bean不能继承自父类,没试过。

转载于:https://my.oschina.net/zzyo/blog/683806

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值