Я попытался вызвать операцию удаления с помощью метода удаления RestTemplate, но он не работает. Код контроллера My Rest для удаления
@RequestMapping(method = RequestMethod.DELETE)
@ResponseBody
public DeleteResponse deleteRecords(
@RequestBody final DeleteRequest DeleteRequest) {
DeleteResponse response=new DeleteResponse();
//invoke respective services to do delete operations
response.setStatus("success");
response.setMessage("all records deleted successfully");
return response;
}
Class DeleteRequest{
@JsonProperty(value="userId")
String userId;
@JsonProperty(value="records")
List<Record> records;
}
class Record{
@JsonProperty(value="key1")
String key1;
@JsonProperty(value="key2")
String key2;
@JsonProperty(value="key3")
String key3;
}
// Вызов клиента
public void deleteRecords(String url,DeleteRequest deleteRequest){
resttemplate.delete(url, deleteRequest);
}
Я вызываю put аналогичным образом, он работает нормально. для удаления я получаю исключение ниже. Произошло исключение: не удалось прочитать JSON: нет содержимого для сопоставления из-за конца ввода.
Чтобы проверить, есть ли проблема в том, как я передаю значения json, я создал класс, расширяющий RestTemplate, и добавил метод performActionForObject
public class MyRestTemplate extends RestTemplate {
public <T> T performActionForObject(String url, Object request, Class<T> responseType,HttpMethod method) throws RestClientException {
RequestCallback requestCallback = httpEntityCallback(request, responseType);
HttpMessageConverterExtractor<T> responseExtractor =
new HttpMessageConverterExtractor<T>(responseType, getMessageConverters());
return execute(url, method, requestCallback, responseExtractor);
}
}
затем вызвал операцию удаления, как показано ниже
DeleteResponse response= resttemplate.performActionForObject(url, deleteRequest, DeleteResponse.class, HttpMethod.DELETE);
Это не сработало, у меня было такое же исключение, поэтому я изменил удаление на публикацию как в контроллере, так и в клиенте отдыха, он работал отлично.
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public DeleteResponse deleteRecords(
@RequestBody final DeleteRequest DeleteRequest) {
DeleteResponse response= resttemplate.performActionForObject(url, deleteRequest, DeleteResponse.class, HttpMethod.POST);
Не знаю, почему это не работает, когда я использую удаление