一尘不染

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

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() {
    Greeting greeting1 = new Greeting(1, "One");
    Greeting greeting2 = new Greeting(2, "Two");
    List<Greeting> list = new ArrayList<>();
    list.add(greeting1);
    list.add(greeting2);
    return list;
}

阅读 974

收藏
2020-05-30

共1个答案

一尘不染

如果将原始方法与新方法(带有List)进行比较,则会发现一些差异。

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

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

作为旁注,您可能还会注意到您使用了@ResponseBody注释。将其放在此处不会引起任何错误,但不是必须的,因为如果您正确地遵循了Spring教程,则应该使用注释控制器,@RestController并这样做,您已经告诉Spring它将使用响应主体。

2020-05-30