การส่งคืนข้อมูลจากบริการเว็บที่เหลือโดยไม่มีพารามิเตอร์ใน uri

มีปัญหาในการส่งคืนสตริงจากบริการเว็บที่เหลือ:

[WebInvoke(Method = "PUT", UriTemplate = "/Filters", 
BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string CreateFilter(Filter InputFilter);

ดังที่คุณเห็นว่า URL ไม่มีพารามิเตอร์ใดๆ ข้อมูลทั้งหมดจะถูกส่งผ่านสตรีมไปยัง URL สตริงที่ส่งคืนจะขึ้นอยู่กับข้อมูลที่ส่งไปยัง URL

เมื่อฉันใช้แอปพลิเคชันทดสอบ .net การตอบสนองนั้นถูกต้อง (ขึ้นอยู่กับอินพุต)

เมื่อฉันใช้เซิร์ฟเล็ต Java บริการส่งคืนข้อผิดพลาด 400 เมื่อเรียกใช้ GetInputStream() สำหรับ HttpURLRequest

ปรากฏว่าเซิร์ฟเล็ต Java ทำการเรียกครั้งที่สองไปยัง URL และคาดว่าจะได้รับการตอบสนอง (ซึ่งไม่มีอยู่เนื่องจากขึ้นอยู่กับอินพุต) ฉันทดสอบสิ่งนี้โดยเปลี่ยนการส่งคืนเป็นค่าคงที่ (ซึ่งไม่ได้ขึ้นอยู่กับอินพุต) เมื่อฉันทำสิ่งนี้วิธี GetInputStream() ของฉันก็ใช้งานได้

รหัสเซิร์ฟเล็ต:

OutputStream out = connection.getOutputStream();
out.write(jsonValue.getBytes());
out.close();

String response = "";


BufferedReader readResponse = 
new BufferedReader(new InputStreamReader(connection.getInputStream()));

response = readResponse.readLine();


return response;

หมายเหตุ: วิธีการอื่นใช้รหัสเดียวกันนี้สำหรับ URL ที่มีพารามิเตอร์อยู่และส่งคืนข้อมูลที่ถูกต้อง (เพิ่มหลักฐานว่าเซิร์ฟเล็ตกำลังทำการเรียก URL ครั้งที่สองในวิธีที่เป็นปัญหาของฉัน) นอกจากนี้ out.close() ไม่ใช่ ปัญหา.


person AssHat44    schedule 08.11.2011    source แหล่งที่มา


คำตอบ (1)


แก้ไขแล้ว สิ่งนี้กลายเป็นปัญหาใน Json ที่ Servlet กำลังส่ง เมื่อบริการบนเว็บพยายามใช้ข้อมูลชิ้นใดชิ้นหนึ่ง ข้อมูลดังกล่าวอาจเกิดขึ้นและเกิดข้อผิดพลาด และไม่สร้างสตริงส่งคืนที่ต้องการ

[{"Key":"1","Value":"one"},{"Key":"2","Value":"two"},{"Key":"3","Value":"three"}]

ตัวแทน C# ^^

{"3":"three","2":"two","1":"one"}

ตัวแทนจาวา ^^

พจนานุกรมกับ HashMap >‹

person AssHat44    schedule 08.11.2011