本篇文章主要根据两种常见的错误场景,深入 SpringMVC HTTP 请求与响应过程流程。而整个 SpringMVC HTTP 请求与响应过程涉及的内容远不止于此,如果读者对本文未涉及的内容有兴趣,欢迎与我交流。
提取主要内容如下:
- 常见的两种错误场景介绍;
- HTTP 请求与处理源码解析;
- 两种错误场景解决方案;
- 涉及的设计模式介绍。
相关版本:
- Maven : apache-maven-3.3.9
- SpringMVC :4.1.1.RELEASE
- Tomcat-Maven-Plugin: 2.2
介绍方式: 代码 + 文字说明 + 源码截图(为减小篇幅,因此源码部分采用截图的方式)。读者阅读时,结合前面列出的流程图/主要操作步骤,再浏览。
本文中涉及的代码下载
一、常见的两种错误场景
1.场景1
jQuery 以 ajax 方式访问 SpringMVC 接口时,如未显示指定 Content-Type,则会显示 ‘415 (Unsupported Media Type)’ 错误。如:
前端代码片段:
function fSave(url) {
var obj = {
};
obj['cateId'] = $("input[name=cateId]").val();
obj['cateName'] = $("input[name=cateName]").val();
$.ajax({
url: url,
method: 'post',
data: JSON.stringify(obj), // 以json字符串方式传递
success: function(data) {
console.log(data);
},
error: function(data) {
console.log("error...");
console.log(data);
}
});
}
后端接口代码片段为:
@RequestMapping(value = "/save-by-model-2", method = RequestMethod.POST)
@ResponseBody
public Category saveByModel2(@RequestBody Category category){
categoryService.save(category);
return category;
}
2.场景2
SpringMVC 接口定义返回 Json 格式数据时,一般有 字符串和对象 两种方式。而相同条件下,返回 Json 格式字符串时,中文会出现乱码。如:
前端代码片段:
function fSave(url) {
var obj = {
};
obj['cateId'] = $("input[name=cateId]").val();
obj['cateName'] = $("input[name=cateName]").val();
$.ajax({
url: url,
method: 'post',
contentType: 'application/json',
data: JSON.stringify(obj), // 以json字符串方式传递
success: function(data) {