问题重现
问题代码
Contoller中的方法
@Controller
@RequestMapping (path = "/api/student")
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping (path = "/no/{no}")
public Result queryStudent(@PathVariable(value = "no") String no) {
System.out.println("按学号查询" + no);
List<Student> studentList = studentService.findByStudentNo(no);
if (studentList != null) {
return ResultUtil.success(studentList);
} else {
return ResultUtil.error(ResultCode.STUDENT_QUERY_ERROR_UNKNOWN, "未知错误");
}
}
}
我想用PathVariable实现按学号查询的功能,只要访问类似http://localhost:8080/TrainingProject/api/student/no/202020202020
这样的路径时,spring会帮我们把路径中指定部分内容转换成方法中的参数,但是当我访问的时候总是很久没响应。
添加控制台输出语句后发现,只要我访问这个路径,queryStudent方法就不断被调用。如果在postman中测试该接口,会在一段时间后返回错误代码500(服务器异常)。同时服务器也给我打印了1.3G大小的日志文件。。
控制台输出:
Postman:
从异常堆栈信息上,我们能够看到堆栈溢出,但是这对解决问题起不了什么帮助
解决办法
在方法上加@ResponseBody注解。。。
别问,问就是我憨憨。。。忘记加@ResponseBody注解居然会出这么严重的bug
正确代码
@Controller
@RequestMapping (path = "/api/student")
public class StudentController {
@Autowired
private StudentService studentService;
@ResponseBody
@RequestMapping (path = "/no/{no}")
public Result queryStudent(@PathVariable(value = "no") String no) {
System.out.println("按学号查询" + no);
List<Student> studentList = studentService.findByStudentNo(no);
if (studentList != null) {
return ResultUtil.success(studentList);
} else {
return ResultUtil.error(ResultCode.STUDENT_QUERY_ERROR_UNKNOWN, "未知错误");
}
}
}