环境:Centos6.5 x64 MyQL6.7 tomcat8.5.6 java sdk 1.8.0_121 eclipse 4.6.1
spring下载地址:http://repo.spring.io/release/org/springframework/spring/
前期配置时出现启动 tomcat 失败
tomcat 报错信息:java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException
1、需要把 spring mvc 所有有信赖包都要放在 /WEB-INF/lib下,不要使用 build path 引入这些包,
增加 commons-logging包(http://commons.apache.org/proper/commons-logging/)。
2、对web.xml 中的配置<servlet-mapping>时,servlet-mapping的属性配置错误。
<servlet-mapping>
<servlet-name>coreServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
其中<url-pattern></url-pattern>可以为你想要的路径,但是一定要配置正确。
3、修改项目.setting 目录下的org.eclipse.wst.common.project.facet.core.xml文件,修改 <installed facet="jst.web" version="3.1"/> 中的 version='2.5'
4、SpringMVC @RequestBody 需要的是 json 字符串,如果上传的是json对象会提示
WARNING: Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON document: Unrecognized token 'Code': was expecting ('true', 'false' or 'null')
$.ajax({
url:'/MyTest/Test/GetTest',
data:JSON.stringify({SCode:"this is my data",PageIndex:"10",PageSize:"10"}), // 注意这里已把 json对象转成 字符串
type:"POST",
dataType:"json", //后台返回的 json
contentType:"application/json;charset=utf-8", //必须,@ReqeustBody根据这个来确定需要使用JsonHttpMessageConverter
success:function(data)
{
alert(data.RetMsg+"-"+data.TotalRows);
},
error:function(XMLHttpRequest, textStatus, errorThrown)
{
alert(XMLHttpRequest.status);
}
})
5、@RequestBody 接受 json数组对象
后台
@ResponseBody
@RequestMapping(value = "/MyData",method={RequestMethod.POST})
public BaseResult MyData(@RequestBody User[] req) // 不能使用 List<User>
{
BaseResult retObj = new BaseResult();
retObj.RetCode = "00000";
retObj.RetMsg = req.Code;
return retObj;
}
前台
var users=[];
var user1={"userName":"test","address":"111"};
var user2={"userName":"qq","address":"22"};
users.push(user1);
users.push(user2);
data = JSON.stringify(users);
6、SpringMVC helloword
@Controller //标注为一个控制器
@RequestMapping("/Test") //请求 url路径
public class HelloWord {
@RequestMapping("/HelloWord") //请求资源url
public String Hello() {
return "Index"; //返回对应的 jsp 文件
}
//返回请求数据
@ResponseBody
@RequestMapping(value = "/Json")
public ResponseEntity<BaseResult> ResultJSON() {
BaseResult retObj = new BaseResult();
try {
retObj.RetCode = "00000";
retObj.RetMsg = "test";
return new ResponseEntity<BaseResult>(retObj,HttpStatus.OK);
} catch (Exception ex) {
throw ex;
}
}
//返回JSON数据
@ResponseBody
@RequestMapping(value = "/MyJson")
public BaseResult Json() {
BaseResult retObj = new BaseResult();
try {
retObj.RetCode = "00000";
retObj.RetMsg = "测试 JSON";
retObj.TotalRows = 10;
return retObj;
} catch (Exception ex) {
throw ex;
}
}
//返回 List对象
@ResponseBody
@RequestMapping(value = "/MyList")
public List<BaseResult> MyList() {
List<BaseResult> retObj = new ArrayList<BaseResult>();
BaseResult item = new BaseResult();
item.RetCode = "00001";
item.RetMsg = "1";
retObj.add(item);
BaseResult item1 = new BaseResult();
item1.RetCode = "00001";
item1.RetMsg = "1";
retObj.add(item1);
return retObj;
}
//请求 JSON 数据,但 @RequestBody只接收 JSON字符串
@ResponseBody
@RequestMapping(value = "/MyData",method={RequestMethod.POST})
public BaseResult MyData(@RequestBody BaseRequest req)
{
BaseResult retObj = new BaseResult();
retObj.RetCode = "00000";
retObj.RetMsg = req.Code;
retObj.TotalRows = req.PageIndex + req.PageSize;
String vSQL = "select * from t";
return retObj;
}
}
7、在Controller 中使用 Redirect 处理请求
//redirect @RequestMapping("/redirect") public String redirect(){ return "redirect:hello"; }