Я бегу JEE6
с glassfish v3
на NetBean6.9
и работаю на RESTful web service
.
У меня есть jsp-файл, который содержит функцию javascript ниже.
Он в основном читаетсяинформация из HTML input fields
и преобразование в JSON format
.
Затем с помощью onclick Ajax call
, попытайтесь отправить строку JSON, используя метод HTTP PUT .(т.е. я пытаюсь UPDATE
запись в БД с использованием REST)
Для js framework я использую Prototype1.7
Когда я тестирую функцию ниже, она всегда возвращает 404таким образом, отображается сообщение «что-то пошло не так».
Согласно моему поиску, версия Prototype выше 1.5 поддерживает методы HTTP PUT / DELETE и для этого добавьте _method к URL-адресу запроса, например, что яя делаю:
var url = "/resources/inventory/" + invId + "?_method=PUT";
Это создаст, например:
http://localhost:8080/NoJSF/resources/inventory/123?_method=PUT
Я посмотрел на Firebug и консоль, показывая, что запрос на самом деле POST .Не уверен, но я полагаю, что это из-за того, что Prototype использует туннелирование POST для достижения метода PUT?
Кроме того, несмотря на то, что вызывается Ajax, мой Java-файл с аннотированным JAX-RS с @POST даже не вызывается (@Версия GET работает с отдельными данными, так что это правильный файл), поскольку первая строка метода, в которой сообщение о спите не отображается, поэтому я подозреваю, что в моем операторе Ajax есть какая-то ошибка или что-то за пределами моего мышления ... может кто-нибудь дать мненамек?
function protoAjaxPut() {
//get all fields value and store into json
var invId = document.getElementById("invIdField").value;
var invName = document.getElementById("invNameField").value;
//put info into JSON format
var jsonInput = JSON.stringify(new Array(invName));
var url = "/resources/inventory/" + invId + "?_method=PUT";
new Ajax.Request(url, {
method:'put',
postBody: jsonInput,
ContentType: 'application/json',
onSuccess: function(transport) {
var responseData = transport.responseText;
document.getElementById('putResponseText').innerHTML = responseData;
},
onFailure: function() { alert('something went wrong!')}
})
}//end protoAjaxPut