如何让Spring控制器返回JSON数组而非JSON对象?
解决Spring控制器返回List被包装为JSON对象的问题
常见解决方案
1. 确保控制器正确使用注解
如果你的控制器类用的是@Controller,需要在方法上额外加@ResponseBody注解,让Spring直接把返回的集合序列化为扁平JSON数组;更推荐直接用@RestController,它已经整合了@Controller和@ResponseBody的功能:
// 推荐写法 @RestController public class StudentController { @GetMapping(value = "/students") public List<Student> getStudents() { List<Student> list = service.getStudents(); return list; } } // 或者用@Controller配合@ResponseBody @Controller public class StudentController { @GetMapping(value = "/students") @ResponseBody public List<Student> getStudents() { List<Student> list = service.getStudents(); return list; } }
2. 禁用Jackson的根节点包装
如果项目配置了Jackson自动将集合包装为带根节点的JSON对象,可以通过配置关闭该功能:
- 在
application.properties中添加:
spring.jackson.serialization.wrap-root-value=false
- 或者在
application.yml中添加:
spring: jackson: serialization: wrap-root-value: false
3. 使用ResponseEntity明确返回响应体
直接返回ResponseEntity<List<Student>>,显式指定响应内容,避免被额外包装:
@GetMapping(value = "/students") public ResponseEntity<List<Student>> getStudents() { List<Student> list = service.getStudents(); return ResponseEntity.ok(list); }
内容的提问来源于stack exchange,提问作者Youssef Khaled
相关产品推荐
相关产品推荐

