2015-10-17 2 views
8

У меня есть простой метод в контроллереВозможно ли весной MVC 4 вернуть Boolean как JSON?

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

и отвечают я хочу вернуть { "success": true }

Annontation @ResponseBody говорит, что ответ будет в формате JSON. Но теперь, в ответ, я верю, что это правда.

Есть ли какой-либо другой способ, как его решить?

Или я должен сделать что-то вроде

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

Я хотел бы знать, лучшие практики для этого.

ответ

16

Вы не можете вернуть примитивный тип (или примитивный тип обертки) и получить объект JSON в качестве ответа. Вы должны вернуть какой-либо объект, например Map или пользовательский объект домена.

Подход карты, показанный в вашем вопросе, является абсолютно допустимым. Если вы хотите, вы можете сжать его в красивый однострочный слой, используя Collections.singletonMap().

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

Невозможно. Имя переменной «success» теряется. Используйте карту или создайте небольшой класс-оболочку.

public class BooleanResult { 
    public boolean success; 
} 
2

Вы не можете вернуть логическое значение, однако, рассмотреть возможность использования ResponseEntities и использовать код статуса HTTP для общения успеха.

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

Этот метод возвращает пустой документ, но вы можете контролировать код состояния (запрещенное это только пример, вы можете выбрать код статуса, который является более подходящим, например, не нашло?)

0

Я использую jsonobject для этого.

возвращение новый JSONObject(). Put ("результат", true) .toString().

Смежные вопросы