2014-10-11 5 views
26

नियंत्रक में मैं जेसन सरणी बना देता हूं। अगर मैं List<JSONObject> लौट यह ठीक है:वसंत: वापसी @ResponseBody "ResponseEntity <सूची <JSONObject>>"

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

लेकिन मैं JSON सारणी और HTTP स्थिति कोड की जरूरत है:

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 

कैसे कर सकते हैं:

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

ग्रहण XXX लाइन में त्रुटि देख मैं जेसन + 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); 
} 
+1

मुझे लगता है कि यह सिर्फ किया गया 'लौट नई ResponseEntity <सूची > (संस्थाओं है चाहिए, HttpStatus। ठीक है); सही? भले ही, नीचे आपका समाधान ठीक है। – adchilds

+0

धन्यवाद, यह काम करता है। क्या बेहतर है? 'ResponseEntity <सूची >' या 'ResponseEntity 'आपकी राय क्या है? – martin

+1

पठनीयता की चिंताओं के लिए, पूर्व मेरी राय में बेहतर है। – adchilds

उत्तर

15

अब मैं वापस जाने के Object: वहाँ एक json वस्तु + http स्थिति कोड के लिए मेरे कार्य कोड है। मुझे बेहतर समाधान नहीं पता, लेकिन यह काम करता है।

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

के बजाय

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

अन्य समाधान http://stackoverflow.com/a/17539455/1974494 '@ ResponseStatus' और' @ ExceptionHandler' का उपयोग किया जाता है। – martin

+0

ResponseEntity एक स्पष्ट कारण के लिए काम करता है, क्योंकि ऑब्जेक्ट – Acewin

+0

सब कुछ के लिए मूल वर्ग है (मैंने नई प्रतिक्रिया प्रतिक्रिया (इकाइयों, HttpStatus.OK);) लेकिन नियंत्रक मेरे लिए खाली सरणी लौटा रहा है। कोई सुझाव कृपया – swaps

18

कोशिश

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

ठीक है। यह काम कर रहा है –

2

व्यक्तिगत रूप से, मैं करने के लिए विधि हस्ताक्षर बदल रहा पसंद करते हैं:

public ResponseEntity<?> 

यह संभवतः एक त्रुटि लौटने का लाभ देता है गायन के रूप में संदेश सेवाओं के लिए ली आइटम, जब ठीक है, वस्तुओं की एक सूची वापस करें।

जब लौटने मैं किसी भी प्रकार (जो वैसे भी इस मामले में अप्रयुक्त है) का उपयोग नहीं करते:

return new ResponseEntity<>(entities, HttpStatus.OK); 
संबंधित मुद्दे