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

时间:2017-01-18 12:14:00

标签: java spring spring-boot

关于Spring Boot,我做了a lesson,但效果很好。但是,如果我想返回一组对象呢?我尝试过this,但它不起作用。我怎么能正确地做到这一点?

使用一个对象(可行):

@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;
}

3 个答案:

答案 0 :(得分:17)

如果您将原始方法与新制作的方法进行比较(使用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它将使用回复正文。

答案 1 :(得分:2)

假设我们有CarDetails Pojo列表,我们希望将其退回

@RestController
public class CarDetailController {
  @GetMapping("/viewAllCarDetailList")
    public List<CarDetail> retrieveAllCarDetails() {
        List<CarDetail> contacts = new ArrayList<CarDetail>();

        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"
    }
]

output in Postman

答案 2 :(得分:-1)

以下是我为此所做的代码段。删除&#34;消费&#34;来自您的@RequestMapping注释,因为您没有在方法中使用它。

@RestController
public class GreetingsController
{
    @RequestMapping(value = "greetings", 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;
    }

    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;
        }
    }
}

enter image description here