遇到过--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的属性名一样,不过没有试过。
网上资料:
并且好像Java Bean不能继承自父类,没试过。