Я использую angularjs в своем проекте. Я получаю 400 плохих запросов всякий раз, когда запрос POST выполняется с помощью AttachmentsFactory. Функция POST всех других заводов работает правильно. Вот функция регулятора `Запрос POST дает мне 400 Bad Request
$scope.updateAttachment = function(attachment){
console.log(JSON.stringify(attachment));
var response = AttachmentsFactory.update(attachment); //**here's the problem**
response.$promise.then(function(data){
attachment.edit = false;
})
/*$http.post("/rest/attachments", attachment).success(function(data){
//Callback function here.
//"data" is the response from the server.
});*/
}
` и завод AttachmentsFactory
services.factory('AttachmentsFactory', function ($resource) {
return $resource('/rest/:eventId/attachments/:fileId', {}, {
query: { method: 'GET', isArray: true },
remove: {method: 'DELETE'},
update: {method: 'POST', headers:{'Content-Type':'application/json'}}
})
});
Запрос не достигают сервера. Объект, переданный в качестве аргумента является действительным: {"name":"ccccc", "description":"cccc cccc cccc cccc cccc cccc cccc", "fileId":"55144430d18567d9335a94c7", "thumbNailId":null, "extenstion":"jpg", "visibleToPublic":false, "edit":true, "$$hashKey":"object:565" }
Функция сервера, который принимает все остальное следующим
@BodyParser.Of(BodyParser.Json.class)
public Result updateEventAttachment(String eventId) {
try {
logger.warn("HERE HERE HERE HERE HERE HERE HERE HERE HERE HERE HERE HERE HERE HERE HERE HERE HERE ");
JsonNode json = request().body().asJson();
Attachment attachment = Json.fromJson(json, Attachment.class);
logger.debug("Update Request received eventId ={}, fileid{}", eventId, attachment.getFileId());
Event event = eventService.getEvent(eventId);
Set<Attachment> attachments = event.getAttachments();
logger.debug(" Size of attachments = {}", attachments.size());
attachments.remove(attachment);
attachments.add(attachment);
eventService.updateEvent(event);
} catch (Exception e) {
logger.warn(" method = deleteEventAttachment exception={}",
e.toString());
e.printStackTrace();
}
return ok();
}
Я добавил поле headers:{'Content-Type':'application/json'}
к методу POST, его не помогает. Я также пытался использовать $ http вместо $ resource. Все такой же. Пробовал заменять POST с помощью PUT, все тот же. Функции GET и DELETE приложения AttachmentsFactory работают правильно. Может ли кто-нибудь помочь мне выяснить, что я делаю неправильно? Застряли с этим больше суток.
Это по существу означает, что сервер ожидает данные в структуре, нарушаемой клиентом. Попробуйте удалить ключ $$ hashkey из данных клиента, который, как я понимаю, очень специфичен для углового и не имеет ничего общего с вашей логикой сервера. –
@ TechMa9iac правильный. В большинстве случаев, когда я испытываю это, я понимаю, что мне не удалось создать правильное pojo, чтобы получить объект в моем слое Rest. – gsalisi
Привет, спасибо, что ответили. Запрос не доходит до сервера. Сервер ожидает объект json. Кроме того, я добавил @JsonIgnoreProperties (ignoreUnknown = true) для получения pojo. Он просто игнорирует неизвестные поля при создании объекта из JsonNode. –