2015-03-27 4 views
0

Я использую 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 работают правильно. Может ли кто-нибудь помочь мне выяснить, что я делаю неправильно? Застряли с этим больше суток.

+0

Это по существу означает, что сервер ожидает данные в структуре, нарушаемой клиентом. Попробуйте удалить ключ $$ hashkey из данных клиента, который, как я понимаю, очень специфичен для углового и не имеет ничего общего с вашей логикой сервера. –

+0

@ TechMa9iac правильный. В большинстве случаев, когда я испытываю это, я понимаю, что мне не удалось создать правильное pojo, чтобы получить объект в моем слое Rest. – gsalisi

+0

Привет, спасибо, что ответили. Запрос не доходит до сервера. Сервер ожидает объект json. Кроме того, я добавил @JsonIgnoreProperties (ignoreUnknown = true) для получения pojo. Он просто игнорирует неизвестные поля при создании объекта из JsonNode. –

ответ

0

Я забыл добавить параметр в контроллер передней панели, который ожидал сервер. Модифицированный контроллер, как показано ниже, для решения проблемы.

$scope.updateAttachment = function(attachment){ 
    console.log(JSON.stringify(attachment)); 
    var response = AttachmentsFactory.update({'eventId':$routeParams.id},attachment); 
    response.$promise.then(function(data){ 
     attachment.edit = false; 
    }) 
} 
Смежные вопросы