Perbedaan antara pegas @Controller
dan @RestController
anotasi.
Bisakah @Controller
anotasi digunakan untuk aplikasi Web MVC dan REST?
Jika ya, bagaimana kita bisa membedakan apakah itu aplikasi Web MVC atau REST.
java
spring
spring-mvc
Srikanth
sumber
sumber
Thymeleaf
itu tidak akan bekerja dengan@RestController
karena@ResponseBody
yang termasuk dalam penjelasan ini.@ResponseBody
membuat objek yang dikembalikan ke sesuatu yang bisa berada di dalam tubuh, misalnya JSON atau XML ( sumber )Dalam kode di bawah ini saya akan menunjukkan kepada Anda perbedaannya
@controller
dan
@RestController
yang
@ResponseBody
diaktifkan secara default. Anda tidak perlu menambahkannya di atas tanda tangan fungsi.sumber
Jika Anda menggunakan,
@RestController
Anda tidak dapat mengembalikan tampilan (Dengan menggunakanViewresolver
di Spring / springboot) dan ya@ResponseBody
tidak diperlukan dalam kasus ini.Jika Anda menggunakan,
@Controller
Anda dapat mengembalikan tampilan di Spring web MVC.sumber
@RestController
kelas yang dianotasi sama dengan@Controller
tetapi@ResponseBody
pada metode handler tersirat.sumber
Sebenarnya, hati-hati - mereka tidak persis sama.
Jika Anda mendefinisikan pencegat apa pun dalam aplikasi Anda, mereka tidak akan berlaku untuk Pengendali yang dianotasi
@RestController
, namun mereka bekerja dengan@Controller
pengontrol yang dianotasi.yaitu. konfigurasi untuk pencegat:
dan dalam deklarasi kontroler Spring:
Akan berhasil
tidak berakhir dengan interceptor dikaitkan dengannya.
sumber
@RestController
diperkenalkan di Spring 4x. Anotasi ini juga dijelaskan sendiri oleh@Controller
karena itu jika tidak berfungsi seperti@Controller
maka laporkan ini sebagai bug.Interceptor
ke@RestController
.Interceptor
ke@RestController
.Seperti yang dapat Anda lihat di dokumentasi Spring ( Spring RestController Documentation ) Anotasi Pengontrol Rest sama dengan anotasi Pengontrol, tetapi dengan asumsi bahwa @ResponseBody aktif secara default, sehingga semua json diuraikan ke objek java.
sumber
Penjelasan @RestController baru di Spring4 +, yang menandai kelas sebagai pengontrol di mana setiap metode mengembalikan objek domain alih-alih tampilan. Ini singkatan untuk @Controller dan @ResponseBody digulung bersama.
sumber
@RestController
disediakan sejak Musim Semi 4.0.1. Kontroler ini menunjukkan bahwa di sini metode @RequestMapping menganggap semantik @ResponseBody secara default.Dalam versi sebelumnya, fungsi serupa dapat dicapai dengan menggunakan di bawah ini:
@RequestMapping
ditambah dengan@ResponseBody
suka@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }
<mvc:annotation-driven/>
dapat digunakan sebagai salah satu cara untuk menggunakan JSON dengan Jackson atau xml.@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }
@ResponseBody
diperlakukan sebagai tampilan di sini di antara MVC dan dikirim langsung alih-alih dikirim dari Dispatcher Servlet dan konverter masing-masing mengubah respons dalam format terkait seperti teks / html, aplikasi / xml, aplikasi / json.Namun, Restcontroller sudah digabungkan dengan ResponseBody dan konverter masing-masing. Kedua, di sini, karena alih-alih mengubah respons seseorang, secara otomatis dikonversi ke respons http.
sumber
@Controller
kembaliView
.@RestController
kembaliResponseBody
.sumber
Anotasi @RestController diperkenalkan di Spring 4.0 untuk menyederhanakan pembuatan layanan web RESTful. Ini adalah anotasi kenyamanan yang menggabungkan @Controller dan @ResponseBody - yang menghilangkan kebutuhan untuk membubuhi keterangan setiap metode penanganan permintaan kelas pengontrol dengan anotasi @ResponseBody.
sumber
@Controller
: Anotasi ini hanya versi khusus@Component
dan memungkinkan kelas pengontrol terdeteksi secara otomatis berdasarkan pemindaian classpath.@RestController
: Anotasi ini adalah versi khusus@Controller
yang menambahkan@Controller
dan@ResponseBody
anotasi secara otomatis sehingga kami tidak perlu menambahkan@ResponseBody
metode pemetaan kami.sumber
@Controller digunakan dalam sistem lama yang menggunakan JSP. itu dapat mengembalikan tampilan. @RestController adalah untuk menandai controller yang menyediakan layanan REST dengan tipe respon JSON. jadi itu membungkus penjelasan @Controller dan @ResponseBody.
sumber
@RestController
adalah komposisi@Controller
dan@ResponseBody
, jika kita tidak menggunakan@ResponseBody
tanda tangan di Metode maka kita perlu menggunakan@Restcontroller
.sumber
Alih-alih menggunakan @Controller dan @ResponseBody, @RestController memungkinkan Anda mengekspos API Istirahat di Spring 4.0 dan di atas.
sumber