如何使用Spring Boot返回一组对象?

我上了一堂关于Spring Boot 的课程 ,它完美无缺。 但是,如果我想返回一组对象呢? 我试过这样做,但它不起作用。 我怎么能正确地做到这一点?

有一个对象(它的工作原理):

 @RequestMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue = "World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } 

有很多对象(它不起作用):

 @RequestMapping(value = "/greeting", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody List greeting() { Greeting greeting1 = new Greeting(1, "One"); Greeting greeting2 = new Greeting(2, "Two"); List list = new ArrayList(); list.add(greeting1); list.add(greeting2); return list; } 

如果您将原始方法与新制作的方法(使用List )进行比较,您会发现一些差异。

首先,在@RequestMapping注释中,您现在正在使用属性consumesproduces 。 在这里produces不是问题,因为您正在生成应该是JSON的响应。 但是你没有消耗任何东西,所以你应该放弃consumes

 @RequestMapping(value = "/greeting", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody List greeting() { Greeting greeting1 = new Greeting(1, "One"); Greeting greeting2 = new Greeting(2, "Two"); List list = new ArrayList<>(); list.add(greeting1); list.add(greeting2); return list; } 

从理论上讲,你甚至可以删除produce属性,因为Spring启动会知道它必须生成JSON,因为应用程序(可能)在类路径上有Jackson。

作为旁注,您可能还会注意到您使用了@ResponseBody注释。 把它放在这里不会导致任何错误,但是没有必要,因为如果你正确地遵循Spring教程,你应该用@RestController注释你的控制器,并且通过这样做,你已经告诉Spring它将使用响应体。

假设我们有CarDetails Pojo列表,我们想要将它们返回

 @RestController public class CarDetailController { @GetMapping("/viewAllCarDetailList") public List retrieveAllCarDetails() { List contacts = new ArrayList(); CarDetail objt = new CarDetail(); objt.setCarModel("hyundai"); objt.setSubModel("I10"); CarDetail objt2 = new CarDetail(); objt2.setCarModel("hyundai"); objt2.setSubModel("I20"); contacts.add(objt); contacts.add(objt2); return contacts; } } public class CarDetails { private String carModel; private String subModel; // Will haave Setter getter and hash code equls method //and constructor } 

这个JSON将输出: –

 [ { "carModel": "hyundai", "subModel": "I10" }, { "carModel": "hyundai", "subModel": "I20" } ] 

邮递员输出

这是我为此做的代码片段。 从@RequestMapping注释中删除“使用”,因为您没有在方法中使用它。

 @RestController public class GreetingsController { @RequestMapping(value = "greetings", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody List greeting() { Greeting greeting1 = new Greeting(1, "One"); Greeting greeting2 = new Greeting(2, "Two"); List list = new ArrayList<>(); list.add(greeting1); list.add(greeting2); return list; } public class Greeting { private String message; private int count; public Greeting(int count, String message) { this.count = count; this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } } 

在此处输入图像描述