初学springboot,最近在给自己做demo练手,遇到了如上json返回值转换错误的问题,报了500错误。
网上搜索到的方法大多说是添加json转换相关的依赖,楼主尝试了并没有成功,于是换了一种迂回的解决方式。
先附上前端代码(这里用了原生的ajax,没有用包装)
function showMyStudents(){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange = function () {
var html = "";
if(xhr.readyState==4){
if(xhr.status==200){
res = xhr.responseText;
console.log(res);
}
}
}
var currentPage=1;
xhr.open("get","/showMyStudents?currentPage=" + currentPage,true);
xhr.send(null);
}
以及原来的后端代码
@RestController
public class ShowMyStudents {
@Autowired
StudentRepository studentRepository;
@GetMapping("/showMyStudents")
public JSONArray showMyStudents(@RequestParam Integer currentPage,
HttpSession session){
Teacher teacher = (Teacher)session.getAttribute("teacher");
List<Student> students = studentRepository.findStudentsByTeacherId(teacher.getId());
JSONArray studentsJSON=new JSONArray(students);
return studentsJSON;
}
}
然而这样就报了如下错误
本来是考虑到,对于前端来说,JSONArray数据会比List数据更好处理。但事实上在有相关配置之后,@Responsebody注解会自动将对象转换为JSON格式从后端传出。
@Responsebody:用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
而@RestController是@Responsebody与@Controller的结合,所以已经可以自动转换JSON,无需传出JSONArray对象。
后端代码修改为:
@RestController
public class ShowMyStudents {
@Autowired
StudentRepository studentRepository;
@GetMapping("/showMyStudents")
public List<Student> showMyStudents(@RequestParam Integer currentPage,
HttpSession session){
Teacher teacher = (Teacher)session.getAttribute("teacher");
List<Student> students = studentRepository.findStudentsByTeacherId(teacher.getId());
// JSONArray studentsJSON=new JSONArray(students);
return students;
}
}
前端代码不变。运行成功。