Spring: return @ResponseBody "ResponseEntity<List<JSONObject>>"
160,740
Solution 1
Now I return Object
. I don't know better solution, but it works.
@RequestMapping(value="", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<Object> getAll() {
List<Entity> entityList = entityManager.findAll();
List<JSONObject> entities = new ArrayList<JSONObject>();
for (Entity n : entityList) {
JSONObject Entity = new JSONObject();
entity.put("id", n.getId());
entity.put("address", n.getAddress());
entities.add(entity);
}
return new ResponseEntity<Object>(entities, HttpStatus.OK);
}
Solution 2
Instead of
return new ResponseEntity<JSONObject>(entities, HttpStatus.OK);
try
return new ResponseEntity<List<JSONObject>>(entities, HttpStatus.OK);
Solution 3
Personally, I prefer changing the method signature to:
public ResponseEntity<?>
This gives the advantage of possibly returning an error message as single item for services which, when ok, return a list of items.
When returning I don't use any type (which is unused in this case anyway):
return new ResponseEntity<>(entities, HttpStatus.OK);
Author by
martin
Updated on May 01, 2020Comments
-
martin almost 4 years
In controller I create json array. If I return
List<JSONObject>
it is ok:@RequestMapping(value="", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE) public @ResponseBody List<JSONObject> getAll() { List<Entity> entityList = entityManager.findAll(); List<JSONObject> entities = new ArrayList<JSONObject>(); for (Entity n : entityList) { JSONObject entity = new JSONObject(); entity.put("id", n.getId()); entity.put("address", n.getAddress()); entities.add(entity); } return entities; }
but I need to return JSON array and HTTP status code:
@RequestMapping(value="", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE) public @ResponseBody ResponseEntity<List<JSONObject>> getAll() { List<Entity> entityList = entityManager.findAll(); List<JSONObject> entities = new ArrayList<JSONObject>(); for (Entity n : entityList) { JSONObject Entity = new JSONObject(); entity.put("id", n.getId()); entity.put("address", n.getAddress()); entities.add(entity); } return new ResponseEntity<JSONObject>(entities, HttpStatus.OK); // XXX }
Eclipse see error in XXX line:
Multiple markers at this line - The constructor ResponseEntity<JSONObject>(List<JSONObject>, HttpStatus) is undefined - Type mismatch: cannot convert from ResponseEntity<JSONObject> to ResponseEntity<List<JSONObject>> - Type mismatch: cannot convert from ResponseEntity<JSONObject> to JSONObject
How can I return json+http reply? There is my working code for returning one json object + http status code:
@RequestMapping(value="/{address}", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE) public @ResponseBody ResponseEntity<JSONObject> getEntity(@PathVariable("address") int address) { Entity n = entityManager.findByAddress(address); JSONObject o = new JSONObject(); o.put("id", n.getId()); o.put("address", n.getAddress()); return new ResponseEntity<JSONObject>(o, HttpStatus.OK); }
-
martin over 9 years
-
Acewin over 7 yearsResponseEntity<Object> works for an obvious reason, because Object is parent class for everything
-
swaps almost 7 yearsI tried the same (return new ResponseEntity<Object>(entities, HttpStatus.OK);)but the controller returning empty array for me. Any suggestions please
-
Kevin McCann over 2 yearsI don't see any reference to a service or role in the original question, and besides, how would you get each JSONObjects role without iterating through the list of JSONObjects?