Ошибка HTTP 415 при отправке запроса POST с данными JSON из HTML в веб-службу Java Rest - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь отправить данные из формы HTML внутри index.html в веб-службу Java REST в виде данных JSON, используя javascript и ajax.До сих пор я пробовал все, что нашел в Интернете, и все равно каждый раз получаю ошибку HTTP 415.

Я знаю значение этой ошибки, но не могу понять, в чем я не прав, поскольку я еще не настолько знакомс JavaScript.

Вот код:

index.html

div style="text-align:center">
<form action="http://localhost/MyTaskTest/servicea" method="post" 
id="test">
<fieldset>
<legend>Add to Your balance</legend>
<label for="amount">Money amount</label>
<input type="text" name="Amount" /> <br/>
<label for="currency">Select currency</label>
<select name="Currency">
    <option value="eur">EUR</option>
</select>
<input type="submit" value="Add">
</fieldset>
</form>
</div>

<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> 
</script>
<script>

(function() {
function toJSONString( form ) {
var obj = {};
var elements = form.querySelectorAll( "input, select" );
for( var i = 0; i < elements.length; ++i ) {
    var element = elements[i];
    var name = element.name;
    var value = element.value;

    if( name ) {
        obj[ name ] = value;
    }
}

return JSON.stringify( obj );
}


window.onload = function() {
var form = document.getElementById("test");
var output = document.getElementById("output");
form.onsubmit = function( e ) {
    e.preventDefault();
    var json = toJSONString( this );
            console.log(json);
            console.log("TEST");
    $.ajax({
        url: form.getAttribute( 'action' ),
        headers: { 
            'Accept': 'application/json',
            'Content-Type': "application/json; charset=utf-8"
        },
        type: 'POST',
        data: json,
        success: function(data) {
            alert("data saved")
            console.log("SUCCESS");
        },
        error: function() {
            console.log("ERROR");
            console.log(errorThrown);
        }
    })
};
}

})();

</script>

А вот служба REST:

@Path("/")
public class ServiceA {

    @POST
    @Path("/servicea")
    //@Consumes(MediaType.APPLICATION_JSON)
    public Response postRequest(String obj) {
        String res = "hii";
        return Response.status(200).entity(obj).build();
    }

РЕДАКТИРОВАТЬ

Я отредактировал свой код ... теперь он работает.но почему мне нужно установить аргумент String вместо JSONObject и удалить @Consumes?В консоли я получаю эти данные из переменной, которую я отправляю в ajax: {"Amount": "213", "Currency": "eur"} ... Итак, я отправляю JSON, но сервис работает, только если аргумент - String.

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ

Мне удалось исправить проблему, мне не хватало зависимости для jersey-json.Спасибо:)

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

В вашем коде есть ошибки, попробуйте отладить его в инструментах разработчика Chrome.Я сделал некоторые изменения, и это работает

    (function() {
    function toJSONString( form ) {
    var obj = {};
    var elements = form.querySelectorAll( "input, select" );
    for( var i = 0; i < elements.length; ++i ) {
        var element = elements[i];
        var name = element.name;
        var value = element.value;

        if( name ) {
            obj[ name ] = value;
        }
    }

    return JSON.stringify( obj );
}

window.onload = function() {
    var form = document.getElementById("test");
    var output = document.getElementById("output");
    form.onsubmit = function( e ) {
        e.preventDefault();
        var json = toJSONString( this );
                console.log(json);
        $.ajax({
            url: form.getAttribute( 'action' ),
            headers: { 
                'Accept': 'application/json',
                'Content-Type': "application/json; charset=utf-8"
            },
            type: 'POST',
            data: json,
            success: function(data) {
                alert("data saved")
            },
            error: function() {
                console.log(errorThrown);
            }
        })
    };
}

})();
0 голосов
/ 17 февраля 2019

попробуйте добавить

dataType: "json",
contentType : "application/json"

к вашему методу $ .ajax

$.ajax({
            url: $form.attr( 'action' ),
            dataType: "json",
            contentType : "application/json"
            type: 'POST',
            data: json,
            success: function(data) {
                alert("data saved")
            },
            error: function() {
                console.log(errorThrown);
            }
        })

также у вас было;в вашем поле url в методе $ .ajax - так что лучше удалить его;) Также всегда лучше проверять, работает ли служба корректно, используя, например, PostMan, так что вы уверены, что это не сторона службы, я не знаю, какую платформу вы использовали, ноВы также можете попробовать заменить

public Response postRequest(JSONObject object) {

на

public Response postRequest(String object) {

, чтобы проверить, нет ли проблем с отображением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...