2015-10-17 9 views
8

Mam proste metody w kontrolerzeCzy jest to możliwe w Spring MVC 4 return Boolean jako JSON?

@RequestMapping("admin") 
public @ResponseBody 
Boolean admin() { 
    Boolean success = true; 
    return success; 
} 

i reagują chcę wrócić { "success": true }

Annontation @ResponseBody mówi, że odpowiedź będzie JSON. Ale teraz w odprężeniu otrzymuję tylko prawdę.

Czy istnieje inny sposób rozwiązania tego problemu?

Albo powinienem coś zrobić jak

@RequestMapping("admin") 
public @ResponseBody 
Map<String, Boolean> admin() { 
    Map<String, Boolean> success = new TreeMap<String, Boolean>(); 
    success.put("success", true); 
    return success; 
} 

chciałbym poznać najlepsze praktyki w tej sprawie.

Odpowiedz

16

Nie można zwrócić typu pierwotnego (lub pierwotnego typu opakowania) i uzyskać obiekt JSON jako odpowiedź. Musisz zwrócić jakiś obiekt, na przykład obiekt Map lub obiekt domeny niestandardowej.

Podejście mapy przedstawione w pytaniu jest całkowicie poprawne. Jeśli chcesz, możesz skompaktować go w ładny jednolinijkowy za pomocą Collections.singletonMap().

@RequestMapping 
@ResponseBody 
public Map<String, Boolean> admin() { 
    return Collections.singletonMap("success", true); 
} 
1

Niemożliwe. Zmienna nazwa "sukces" zostanie utracona. Użyj mapy lub utwórz małą klasę opakowania.

public class BooleanResult { 
    public boolean success; 
} 
2

Nie można zwracać wartość logiczną jednak rozważyć użycie ResponseEntities i użyć kodu stanu HTTP do komunikowania się sukcesem.

public ResponseEntity<String> admin() { 
    if (isAdmin()) { 
     return new ResponseEntity<String>(HttpStatus.OK); 
    } else { 
     return new ResponseEntity<String>(HttpStatus.FORBIDDEN);    
    } 
} 

Metoda ta zwróci pusty dokument, ale można kontrolować kod statusu (Zakazane jest tylko przykładem, można następnie wybrał kod stanu, który jest bardziej odpowiedni, na przykład nie znaleziono?)

0

Używam jsonobject do tego.

return new JSONObject(). Put ("wynik", true) .toString().