Bagaimana cara melakukan panggilan posting ajax dengan data JSON ke layanan istirahat Jersey?

Saya telah membuka tautan ini. tapi ini tidak membantu saya.

Saya menggunakan jersey lib v1.17.1. Layanan istirahat jersey saya:

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/post1")
public ResponseBean post1(@QueryParam("param1")String param1)
{
    return ResponseFactory.createResponse(param1, "TEST", "TEST", null, true);
}

urlnya adalah: /test/post1

Panggilan ajax saya:

var d = {"param1":"just a dummy data"};
    $.ajax({
        type : "POST",
        url : "http://localhost:7070/scl/rs/test/post1",
        contentType :"application/json; charSet=UTF-8",
        data : d,
        dataType : "json"
    })
    .done(function(data){
        console.log(data);
    })
    .fail(function(data){
        console.log(data);
    });

Itu mengenai layanan istirahat saya tetapi sebagai param1 saya selalu mendapatkan nilai nol. Solusi alternatifnya adalah menambahkan JavaBean dengan @XMLRootElement yang akan mengatur/membatalkan marshal objek java ke json dan sebaliknya, tapi saya tidak ingin menggunakan ini.
Apakah ada cara untuk memposting data dan menerimanya menggunakan anotasi yang sesuai seperti @QueryParam atau semacam itu ? Tolong bantu


person user3137239    schedule 11.02.2014    source sumber


Jawaban (2)


Kode sisi server Anda harus seperti ini:

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/post1")
public ResponseBean post1(Data param1)
{
    return ResponseFactory.createResponse(param1, "TEST", "TEST", null, true);
}

di mana Data adalah kelas (POJO) yang diberi anotasi @XmlRootElement dan sesuai dengan data JSON yang akan dikirimkan klien Anda (yaitu, memiliki bidang param1 dengan pengambil dan penyetel). Implementasi JAX-RS akan mengurai isi POST menjadi sebuah instance Data.

@QueryParam anotasi digunakan untuk mengambil parameter kueri dalam (biasanya) GET permintaan. Parameter kueri adalah parameter setelah tanda tanya (?). Misalnya: @QueryParam("start") String start peta akan disetel ke 1 ketika permintaan berikut diproses: GET http://foo.com/bar?start=1, tetapi ini bukan yang Anda lakukan dalam kasus Anda, AFAICS.

person Xavier Coulon    schedule 11.02.2014

@XMLRootElement adalah cara untuk melakukan itu karena json harus di-unmarshaled sebelum Anda dapat menggunakan salah satu elemennya.

person Vasile    schedule 11.02.2014