2015-12-31 4 views
1

Мне интересно, что мне нужно вернуть после этого, я вызываю свой REST API с помощью метода DELETE. Я не смог найти какой-либо стандарт/лучшую практику для этого. На данный момент моя база кода использует два разных подхода, прежде всего, возвращает удаленный ресурс, поэтому в тело ответа я возвращаю только нуль. Второй подход (который мне не очень нравится) Я экземпляр нового объекта, и я возвращаю его. Что вы думаете, это лучший способ? Если ни один из этих двух вам не подходит, какой из них был бы лучшим (практическим) подходом?Что мне нужно вернуть после DELETE?

Вот пример того, что я на самом деле: code sample

NB: Конечно, оба описанного подхода, выполняются после фактического удаления на БД.

ответ

4

После успешного удаления вы должны вернуть пустое тело и код состояния 204 No Content.

При возврате 200 OK с пустым телом некоторые клиенты (например, EmberJS) терпят неудачу, потому что ожидают, что какой-то контент будет проанализирован.

0

Я бы вернул HTTP 204 OK, чтобы сообщить, что запрос преуспел.

Если вам нужно вернуть тело ответа, в случае, если удаление вызвало что-то, я бы использовал HTTP 200 OK с прикрепленным телом.

+0

Это на самом деле то, что я делаю, но не отвечаю на мой вопрос, я спрашиваю, что положить в тело ответа. –

+0

почему вам нужно тело вообще? –

0

что о возвращении void Wich означает HTTP 200 OK в случае успеха

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE) 
    public void delete(@PathVariable("id") Long id) { 
     service.delete(id); 
    } 

EDIT В передней контроллера вы можете использовать что-то вроде этого:

@RequestMapping(...) 
public ModelAndView deleteMySlide(Model model,...){ 
    try { 
     //invoke your webservice Here if success 
     return new ModelAndView("redirect:/anotherPage?success=true"); 

    } catch (HttpClientErrorException e) { 
     //if failure 
     return new ModelAndView("redirect:/anotherPage?success=false"); 
    } 

} 

или:

@RequestMapping(...) 
public String deleteMySlide(Model model,...){ 
    try { 
     //invoke your webservice Here if success 
     model.addAttribute("message","sample success"); 
     return "redirect:/successPage");; 

    } catch (HttpClientErrorException e) { 
     //if failure 
     model.addAttribute("message","sample failure"); 
     return "redirect:/failurePage"); 
    } 

} 
+0

На самом деле это именно то, что делает репозиторий. Но если delete (id) возвращает void, что мне нужно вставить в мой modelAndView? –

+0

вам не нужно ничего ставить, как только вы запускаете удаление, ответ будет ОК, если не будет выбрано исключение, вам придется перехватить его и установить для него статус http, в начале вы увидите сообщение, если оно будет удалено в порядке, иначе сообщение об ошибке. –

+0

@StefanoSaitta вы можете показать нам, как вы запускаете удаление на передней панели? –

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