responseentity example error code java json spring rest http-status-codes

java - example - spring response exception handler



Spring: return @ResponseBody “ResponseEntity<List<JSONObject>>” (3)

Ahora vuelvo Object . No sé una mejor solución, pero funciona.

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

En el controlador creo json array. Si devuelvo la List<JSONObject> está bien:

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

pero necesito devolver la matriz JSON y el código de estado HTTP:

@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 ver error en línea XXX:

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

¿Cómo puedo devolver json + http reply? Mi código de trabajo para devolver un objeto json + código de estado http:

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


En lugar de

return new ResponseEntity<JSONObject>(entities, HttpStatus.OK);

tratar

return new ResponseEntity<List<JSONObject>>(entities, HttpStatus.OK);


Personalmente, prefiero cambiar la firma del método a:

public ResponseEntity<?>

Esto brinda la ventaja de posiblemente devolver un mensaje de error como elemento único para los servicios que, cuando está bien, devuelve una lista de elementos.

Al regresar, no uso ningún tipo (que no se usa en este caso de todos modos):

return new ResponseEntity<>(entities, HttpStatus.OK);