How to return a set of objects with Spring Boot?

后端 未结 3 1350
情书的邮戳
情书的邮戳 2020-12-09 05:52

I did a lesson about Spring Boot and it works perfectly. But what if I want to return a set of objects ? I tried doing this but it doesn\'t work. How can I do i

相关标签:
3条回答
  • 2020-12-09 06:16

    Here is the code snippet I did for this. Remove the "consume" from your @RequestMapping annotation because you are not using that in your method.

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

    0 讨论(0)
  • 2020-12-09 06:20

    Let Say we have list of CarDetails Pojo and we want to return them back

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

    This JSON will be output:-

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

    0 讨论(0)
  • 2020-12-09 06:35

    If you compare your original method to your newly made one (with a List), you'll notice a few differences.

    First of all, within the @RequestMapping annotation you're now using the properties consumes and produces. produces is not a problem here, because you are producing a response that should be JSON. However you're not consuming anything, so you should leave away the 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;
    }
    

    As a sidenote, you might also notice that you used the @ResponseBody annotation. Putting it here won't cause any errors, but it is not necessary, because if you followed the Spring tutorial correctly, you should have annotated your controller with @RestController and by doing that, you already tell Spring that it will use a response body.

    0 讨论(0)
提交回复
热议问题