Просто просмотрите фрагмент кода из метода действий контроллера SpringMVC-3.2.x
. Его довольно легко создать JSON
, но не удалось добавить дополнительный пользовательский заголовок только для этого действия/конкретного действия для конкретного контроллера. не общий для всех JSON
@ResponseBody
способ действия.Как я могу добавить дополнительный заголовок в Response Body
@RequestMapping(value="ajaxDenied", method = RequestMethod.GET)
public @ResponseBody Map<String, Object> ajaxDenied(ModelMap model) {
Map<String, Object> message = new HashMap<String, Object>();
message.put("severity", "error");
message.put("summary", "Restricted access only");
message.put("code", 200);
Map<String, Object> json = new HashMap<String, Object>();
json.put("success", false);
json.put("message", message);
return json;
}
В-другому я мог бы добавить дополнительные заголовки, как мое требование, но здесь есть некоторые проблемы в создании чистого JSON
. Его генерация багги JSON
и возможность разбора нескольких браузеров.
@RequestMapping(value="ajaxSuccess", method = RequestMethod.GET)
public ResponseEntity<String> ajaxSuccess(){
Map<String, Object> message = new HashMap<String, Object>();
message.put("severity", "info");
message.put("location", "/");
message.put("summary", "Authenticated successfully.");
message.put("code", 200);
Map<String, Object> json = new HashMap<String, Object>();
json.put("success", true);
json.put("message", message);
String data = "";
try {
ObjectMapper mapper = new ObjectMapper();
data = mapper.writeValueAsString(json);
} catch (Exception e) { //TODO
}
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=UTF-8");
headers.add("X-Fsl-Location", "/");
headers.add("X-Fsl-Response-Code", "302");
return (new ResponseEntity<String>(data, headers, HttpStatus.OK));
}
этот метод действия может генерировать JSON
строку с экранирующего символа, а не чистого JSON
так зависит от браузера, как это будет разобрать, его причина отказа для хрома. Выход только выглядеть
"{\"message\":{\"summary\":\"Authenticated successfully.\",\"location\":\"/\",\"severity\":\"info\",\"code\":\"200\"},\"success\":true}"
но наш желаемый результат
{
"message":{
"summary": "Authenticated successfully.",
"location":"/",
"severity":"info",
"code":"200"
},
"success":true
}
Я хочу, чтобы генерировать чистый JSON
с дополнительными заголовками на основе условий для конкретного действия конкретного контроллера.
Почему вы конвертируете сами? Пусть Spring справится с этим для вас ... Просто верните «ResponseEntity
Да, вы правы. Я был настолько глуп, что не мог построить такой тип логики. Большое спасибо за ваше предложение. –
Вы нашли решение этого? У меня такая же проблема после обновления зависимостей. Тело моего ResponseEntity и кавычки сбегают с \. –
l15a