Разная кодировка результата HTTP-запроса в зависимости от заголовка Accept
У меня есть контроллер с методом для загрузки файлов, использующий на стороне клиента класс dojo Uploader, который поддерживает загрузку ajax для всех браузеров, кроме IE, и загрузку с помощью IFrame для IE. Результатом является объект JSON, но когда используется механизм IFrame, JSON должен быть заключен в
@RequestMapping(value = "/documentation/{appId:.+}/", method = RequestMethod.POST)
@ResponseBody
public String uploadDocumentation(HttpServletRequest request,
@PathVariable String appId, @RequestParam("uploadedfile") MultipartFile file)
throws Exception {
// ....
String json = JsonUtils.jsonify(map);
if (accepts(request, "application/json")) {
return json;
} else if (accepts(request, "text/html")) {
return "<textarea>" + json + "</textarea>";
} else {
throw new GinaException("Type de retour non supporté");
}
Мне было интересно, есть ли способ зарегистрировать этот механизм кодирования в фреймворке, чтобы нам просто нужно было возвращать объект и позволить фреймворку делать все остальное.
Заранее спасибо.
1 ответ
Для записи я просто добавил второй метод:
@RequestMapping(value = "/documentation/{appId:.+}/", method = RequestMethod.POST,
produces="application/json")
@ResponseBody
public UploadResult uploadDocumentation(@PathVariable String appId,
@RequestParam("uploadedfile") MultipartFile file) throws Exception {
...
return new UploadResult(filename);
}
@RequestMapping(value = "/documentation/{appId:.+}/", method = RequestMethod.POST,
produces="text/html")
@ResponseBody
public String uploadDocumentationIE(@PathVariable String appId,
@RequestParam("uploadedfile") MultipartFile file) throws Exception {
UploadResult obj = uploadDocumentation(appId, file);
String json = JsonUtils.jsonify(obj);
return "<textarea>" + json + "</textarea>";
}