จะทำการโทร ajax ด้วยข้อมูล JSON ไปยังบริการ Jersey rest ได้อย่างไร

ฉันได้อ่านลิงก์นี้แล้ว แต่สิ่งนี้ไม่ได้ช่วยฉันออกไป

ฉันใช้ jersey lib v1.17.1 บริการที่พักเสื้อของฉัน:

@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);
}

URL คือ: /test/post1

การโทรอาแจ็กซ์ของฉัน:

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);
    });

มันกระทบกับบริการส่วนที่เหลือของฉัน แต่เมื่อ param1 ฉันจะได้รับค่าว่างอยู่เสมอ ทางเลือกอื่นคือการเพิ่ม JavaBean ด้วย @XMLRootElement ซึ่งจะรวบรวม / unmarshal วัตถุ java ไปยัง json และในทางกลับกัน แต่ฉันไม่ต้องการใช้สิ่งนี้
มีวิธีใดในการโพสต์ข้อมูลและรับข้อมูลโดยใช้คำอธิบายประกอบที่เหมาะสมเช่น @QueryParam หรืออะไรทำนองนั้น? กรุณาช่วย


person user3137239    schedule 11.02.2014    source แหล่งที่มา


คำตอบ (2)


รหัสฝั่งเซิร์ฟเวอร์ของคุณควรเป็นดังนี้:

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

โดยที่ Data คือคลาส (POJO) ที่มีคำอธิบายประกอบด้วย @XmlRootElement และสอดคล้องกับข้อมูล JSON ที่ไคลเอ็นต์ของคุณจะส่ง (เช่น มีช่อง param1 พร้อมด้วย getter และ setter) การใช้งาน JAX-RS จะยกเลิกการรวมเนื้อหาของ POST ให้เป็นอินสแตนซ์ของ Data

@QueryParam คำอธิบายประกอบถูกใช้เพื่อดึงพารามิเตอร์การสืบค้นในคำขอ (ปกติ) GET พารามิเตอร์การสืบค้นคือพารามิเตอร์ที่อยู่หลังเครื่องหมายคำถาม (?) เช่น: @QueryParam("start") String start จะถูกตั้งค่าเป็น 1 เมื่อคำขอต่อไปนี้ได้รับการประมวลผล: GET http://foo.com/bar?start=1 แต่นี่ไม่ใช่สิ่งที่คุณกำลังทำในกรณีของคุณ AFAICS

person Xavier Coulon    schedule 11.02.2014

@XMLRootElement เป็นวิธีในการทำเช่นนั้นเนื่องจาก json จะต้องไม่ถูก unmarshaled ก่อนจึงจะสามารถใช้องค์ประกอบใด ๆ ของมันได้

person Vasile    schedule 11.02.2014