最近在做mrp仓库管理系统项目,使用了SSM框架,现在在做物料入库部分的物料编号添加功能,但是昨天晚上在浏览器开发者工具中遇到一个404错误(jquery.min.js:5 POST http://localhost:8080/xyd_mrpSystem_web/addType.action 404 (Not Found))
我的代码如下:
storage.js
function saveType(){
alert("123");
$.ajax({
type:"post",
url:getRootPath()+"/addType.action",
data:{
"typeId":$("#typeId").val(),
"typeNum":"XYD-"+$("#myModal_typeNum").val(),
'typeName':$("#myModal_typeName").val(),
'typeDesc':$("#typeDesc").val()
},
success:function (result) {
if(result.state) {
success(result.message);
$("#myModal").modal("toggle");
}else{
error(result.message);
}
},
error:function () {
error("网络出现异常,请稍后再试!");
}
});
}
TypeAction.java
@Controller
public class TypeAction {
@Resource
private TypeService typeService;
@RequestMapping("addType")
public DataResult<Type> addType(@Validated Type type,BindingResult bindingResult,@SessionAttribute("currUser") User currUser) {
System.out.println(type);
DataResult<Type> dataResult = new DataResult<>();
if (bindingResult.hasErrors()) {
dataResult.setMessage(bindingResult.getAllErrors().get(0).getDefaultMessage());
}else {
//判断当前用户的权限,管理员、主管、仓库管理员都可以进行物料类型添加
if (currUser.getLevel().matches("[012]")) {
if (typeService.insertType(type)) {
dataResult.setMessage("物料类型信息添加完成!");
dataResult.setState(true);
} else {
dataResult.setMessage("物料类型信息添加失败!");
}
} else {
dataResult.setMessage("您没有此操作权限!");
}
}
return dataResult;
}
}
TypeService.java
@Service
public class TypeService {
@Resource
private TypeMapper typeMapper;
public boolean insertType(Type type) {
return typeMapper.insertSelective(type) > 0 ? true : false;
}
}
添加完数据,数据库有添加到数据,后台也有打印数据,就是浏览器的开发者工具报错了
控制台:
昨天晚上各种检查,硬是没被我发现哪里错了(才会导致出现404错误),可能是晚上不太清醒吧,今天来到教室打开电脑,想着再试一下有没有错,结果还是一样的,我又开始了检查代码,皇天不负有心人,终于被我发现错误在哪,原来我就是一个马大哈,在action中漏写了注解(@ResponseBody),加上这个注解,运行了一下,哈哈,开心,错误消失了,还用一种方式是用(@RestController代替@Controller和 @ResponseBody)。
第一种方式(@Controller
@ResponseBody):
第二种方式(@RestController):
结果是(添加完成,不再报404错误):
解释一下:
@Controller:用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象
@ResponseBody:这个注解用于将Controller的方法返回的对象,如果action返回的数据是JSON类型,需要加一个注解,需要加一个注解,返回的JSON数据保存到request域中,需要添加Jackson JSON依赖,有三个包
@RestController:是@Controller和@ResponseBody的组合注解(所以可以代替@Controller和@ResponseBody)