Saya menggunakan jQuery $.getJSON()
untuk melakukan panggilan asinkron ke backend Spring MVC sederhana saya. Sebagian besar metode pengontrol Spring terlihat seperti ini:
@RequestMapping(value = "/someURL", method = RequestMethod.POST)
public @ResponseBody SomePOJO getSomeData(@ModelAttribute Widget widget,
@RequestParam("type") String type) {
return someDAO.getSomeData(widget, type);
}
Saya memiliki hal-hal yang diatur sehingga setiap controller mengembalikan @ResponseBody
JSON, yang diharapkan oleh sisi klien.
Tetapi apa yang terjadi ketika permintaan tidak seharusnya mengembalikan konten apa pun ke sisi klien? Bolehkah saya mau:
@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public @ResponseBody void updateDataThatDoesntRequireClientToBeNotified(...) {
...
}
Jika tidak, apa sintaksis yang tepat untuk digunakan di sini?
java
jquery
spring-mvc
IAmYourFaja
sumber
sumber
POST
data.Jawaban:
Anda dapat mengembalikan void, maka Anda harus menandai metode dengan @ResponseStatus (value = HttpStatus.OK) Anda tidak perlu @ResponseBody
Hanya dapatkan metode mengembalikan implikasi kode status 200, semua yang Anda miliki melakukan salah satu dari tiga hal:
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
HttpEntity
instancesumber
@ResponseStatus
dan tidak seharusnya. Cukup memiliki@ResponseBody
padavoid
handler baik-baik saja cukup.Anda cukup mengembalikan ResponseEntity dengan tajuk yang sesuai:
sumber
ResponseEntity is a raw type. References to generic type ResponseEntity<T> should be parameterized
Anda dapat mengembalikan objek "ResponseEntity". Menggunakan objek "ResponseEntity" sangat nyaman baik pada saat membangun objek respons (yang berisi Badan Respon dan Kode Status HTTP) dan pada saat mendapatkan informasi dari objek respons.
Metode seperti getHeaders (), getBody (), getContentType (), getStatusCode () dll membuat pekerjaan membaca objek ResponseEntity sangat mudah.
Anda harus menggunakan objek ResponseEntity dengan kode status http 204 (Tidak Ada Konten), yang secara khusus untuk menentukan bahwa permintaan telah diproses dengan benar dan badan respons sengaja dikosongkan. Menggunakan Kode Status yang tepat untuk menyampaikan informasi yang benar sangat penting, terutama jika Anda membuat API yang akan digunakan oleh banyak aplikasi klien.
sumber
@ResponseStatus(HttpStatus.NO_CONTENT)
diselesaikanXML Parsing Error: no root element found
untuk saya di browserYa, Anda dapat menggunakan @ResponseBody dengan
void
tipe pengembalian:sumber
Tidak ada yang salah dengan mengembalikan kekosongan
@ResponseBody
dan Anda harusPOST
meminta.Gunakan kode status HTTP untuk mendefinisikan kesalahan dalam rutinitas handler pengecualian sebagai gantinya orang lain menyebutkan status keberhasilan. Metode normal seperti yang Anda miliki akan mengembalikan kode respons
200
yang mana yang Anda inginkan, penangan pengecualian apa pun dapat mengembalikan objek kesalahan dan kode yang berbeda (yaitu500
).sumber
Tetapi ketika sistem Anda tumbuh dalam ukuran dan fungsionalitas ... saya pikir mengembalikan selalu json bukanlah ide yang buruk sama sekali. Lebih merupakan masalah arsitektur / "desain skala besar".
Anda dapat berpikir tentang mempertahankan selalu JSON dengan dua bidang pengetahuan: kode dan data. Di mana kode adalah kode numerik yang menentukan keberhasilan operasi yang harus dilakukan dan data adalah data tambahan yang terkait dengan operasi / layanan yang diminta.
Ayo, ketika kita menggunakan backend penyedia layanan, layanan apa pun dapat diperiksa untuk melihat apakah itu berfungsi dengan baik.
Jadi saya tetap, untuk tidak membiarkan musim semi mengelola ini, mengekspos operasi pengembalian hibrida (Beberapa mengembalikan data lain ...) .. instaed memastikan bahwa server Anda mengekspos antarmuka yang lebih homogen. Lebih sederhana di akhir hari.
sumber
Berikut ini contoh kode yang saya lakukan untuk metode asinkron
Anda tidak perlu mengembalikan apa pun dari metode Anda semua yang Anda butuhkan untuk menggunakan anotasi ini sehingga metode Anda harus kembali OK dalam setiap kasus
sumber