2013-06-03 1 views
1

У меня есть метод ниже контроллера, который загружает файлы на мой сервер. Я хотел бы вернуть JSON для статуса Plupload. Однако ответ, похоже, отправляется как отправка, а не json @ResponseBody. Есть идеи?Возвращение ответа JSON для Spring MVC Запрос на отправку

private static final String RESP_SUCCESS = "{\"jsonrpc\" : \"2.0\", \"result\" : \"success\", \"id\" : \"id\"}"; 
    private static final String RESP_ERROR = "{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 101, \"message\": \"Failed to upload file.\"}, \"id\" : \"id\"}"; 

    @RequestMapping(method = RequestMethod.POST) 
    public String uploadItem(@RequestBody MultipartFile file, 
          @RequestParam String name, 
          @RequestParam(required = false, defaultValue = "-1") int chunks, 
          @RequestParam(required = false, defaultValue = "-1") int chunk) { 
     Media media = new Media(); 
     try { 
      Path path = Paths.get("/Users/username/Desktop/Test", file.getOriginalFilename()); 
      media.setContentType(file.getContentType()); 
      media.setFileName(file.getOriginalFilename()); 
      media.setFileSize(file.getSize()); 
      media.setFilePath(path.toString()); 
      if (media.getContentType().contains("image")) { 
       Image image = new Image(); 
       image.setImagePath(path.toString()); 
       imageDao.save(image); 
      } 
      byte[] bytes = file.getBytes(); 
      Files.write(path, bytes, StandardOpenOption.CREATE); 
      mediaDao.save(media); 
      return RESP_SUCCESS; 
     } catch (IOException e) { 
      e.printStackTrace(); 

     } 
     return RESP_ERROR; 
    } 
} 

Выдает следующую ошибку:

WARN - No mapping found for HTTP request with URI [/{"jsonrpc" : "2.0", "result" : "success", "id" : "id"}] in DispatcherServlet with name 'cr' 

ответ

2

Я думаю, что ваш метод должен быть аннотированный с @ResponseBody.

@RequestMapping(method = RequestMethod.POST) 
@ResponseBody 
public String uploadItem(@RequestBody MultipartFile file, 
          @RequestParam String name, 
          @RequestParam(required = false, defaultValue = "-1") int chunks, 
          @RequestParam(required = false, defaultValue = "-1") 

Это как Spring проверяет преобразования Json: это существует

  • Джексон библиотека в проекте
  • классам
  • : аннотация MVC-привод включен
  • Вернитесь методом с аннотацией @ResponseBody

Весна будет обрабатывать преобразование JSON автоматически.

+0

Я редактировал свой ответ на метод я использовал, что в конечном итоге фиксируя его, так как ваш был достаточно близко, чтобы получить меня там. Спасибо! – zmanc

+0

Синтаксис неверен, пожалуйста, не редактируйте ответ, предлагая совершенно неправильный синтаксис из того, что говорит текст («возвращаемый тип должен быть @ResponseBody»), поскольку это уже не имеет смысла. –

+0

@ThomasW Использование аннотации не может быть возвратным типом. Тип возврата - 'String'. Метод аннотируется с помощью '@ ResponseBody'. –

0

Метод должен иметь тип возврата строки, который отделен от аннотации (что результат должен использоваться как тело ответа).

@ResponseBody не является типом возврата или типом вообще! Это аннотация.

Текстовое содержание & Синтаксис, предложенный в предыдущем ответе, является грубым неправильным, хотя я даю ему кредит в других отношениях.

Мое предложение:

@RequestMapping(method = RequestMethod.POST) 
@ResponseBody 
public String uploadItem(@RequestBody MultipartFile file, 
         @RequestParam String name, 
         @RequestParam(required = false, defaultValue = "-1") int chunks, 
         @RequestParam(required = false, defaultValue = "-1") 
+0

'@ResponseBody public String uploadItem (..)' равнозначно 'public @ResponseBody String uploadItem (..)'. Синтаксис Java позволяет обоим. –

+0

'@ ResponseBody' - это аннотация, а не тип, поэтому не может быть возвратным типом метода. По этой причине ответ Юнеда однозначно ошибочен. Но спасибо @SotiriosDelimanolis за информацию об аннотировании возвращаемого типа метода, эквивалентную аннотации самого метода. –