Java 如何使用Spring Boot返回一组对象?
我做了Java 如何使用Spring Boot返回一组对象?,java,spring,spring-boot,Java,Spring,Spring Boot,我做了springboot,效果非常好。但是如果我想返回一组对象呢?我试过了,但没用。我怎样才能正确地做呢 使用一个对象(有效): 有很多对象(不起作用): @RequestMapping(value=“/greeting”,method=RequestMethod.GET,consumes=MediaType.APPLICATION\u JSON\u value,products=MediaType.APPLICATION\u JSON\u value) public@ResponseBody
springboot
,效果非常好。但是如果我想返回一组对象呢?我试过了,但没用。我怎样才能正确地做呢
使用一个对象(有效):
有很多对象(不起作用):
@RequestMapping(value=“/greeting”,method=RequestMethod.GET,consumes=MediaType.APPLICATION\u JSON\u value,products=MediaType.APPLICATION\u JSON\u value)
public@ResponseBody列表问候语(){
问候语1=新问候语(1,“一”);
问候语2=新问候语(2,“两”);
列表=新的ArrayList();
列表。添加(问候1);
列表。添加(问候2);
退货清单;
}
以下是我为此编写的代码片段。从@RequestMapping注释中删除“consume”,因为您在方法中没有使用它
@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;
}
}
}
@RestController
公共类迎宾控制器
{
@RequestMapping(value=“问候”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u value)
公共@ResponseBody
列表问候语(){
问候语1=新问候语(1,“一”);
问候语2=新问候语(2,“两”);
列表=新的ArrayList();
列表。添加(问候1);
列表。添加(问候2);
退货清单;
}
公开课问候语
{
私有字符串消息;
私人整数计数;
公共问候语(整数计数、字符串消息)
{
this.count=计数;
this.message=消息;
}
公共字符串getMessage()
{
返回消息;
}
公共无效设置消息(字符串消息)
{
this.message=消息;
}
}
}
如果您将原始方法与新方法(带有
列表)进行比较,您会注意到一些差异
首先,在@RequestMapping
注释中,您现在使用的属性是消耗
和产生
<代码>生成
在这里不是问题,因为您生成的响应应该是JSON但是您没有消费任何东西,因此您应该将消费的内容放在一边
@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;
}
@RequestMapping(value=“/greeting”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u value)
public@ResponseBody列表问候语(){
问候语1=新问候语(1,“一”);
问候语2=新问候语(2,“两”);
列表=新的ArrayList();
列表。添加(问候1);
列表。添加(问候2);
退货清单;
}
作为旁注,您可能还注意到您使用了
@ResponseBody
注释。将它放在这里不会导致任何错误,但这不是必需的,因为如果您正确地遵循Spring教程,您应该使用@RestController
为控制器添加注释,这样做,您已经告诉Spring它将使用一个响应主体。假设我们有一个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
}
请注意:Jackson还添加了一个XML序列化。一旦你把它放在类路径上,它就不再那么确定Spring默认生成什么,我已经看到端点因为它而从JSON转换到XML序列化。最好是指定products属性。如果我们想向arryas添加一个字段值,该怎么办?(类似于{“carModels”:[{objec1},{object2}]}。有没有办法不创建一个单独的对象就可以做到这一点?您是否希望得到这样的响应:-{“carModels”:[{I10},{I20},{Inovoa}},请确认一下?
@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;
}
@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
}
[
{
"carModel": "hyundai",
"subModel": "I10"
},
{
"carModel": "hyundai",
"subModel": "I20"
}
]