Yanıtlar:
@Controller
sınıfları Spring MVC Controller olarak işaretlemek için kullanılır.@RestController
@Controller
ve @ResponseBody
ek açıklamaları eklemekten başka bir şey yapmayan kolaylık ek açıklamasıdır (bkz: Javadoc )Bu yüzden aşağıdaki iki denetleyici tanımı aynı şeyi yapmalıdır
@Controller
@ResponseBody
public class MyController { }
@RestController
public class MyRestController { }
Thymeleaf
çalışmaz . @RestController
@ResponseBody
@ResponseBody
döndürülen nesneleri vücutta olabilecek bir şeye dönüştürür, örneğin JSON veya XML ( kaynak )
Aşağıdaki kodda size arasındaki farkı göstereceğim @controller
@Controller
public class RestClassName{
@RequestMapping(value={"/uri"})
@ResponseBody
public ObjectResponse functionRestName(){
//...
return instance
}
}
ve @RestController
@RestController
public class RestClassName{
@RequestMapping(value={"/uri"})
public ObjectResponse functionRestName(){
//...
return instance
}
}
@ResponseBody
Varsayılan olarak devreye girer. İşlev imzasının üstüne eklemenize gerek yoktur.
Eğer kullanırsanız @RestController
size (kullanarak bir görünüm döndüremez Viewresolver
evet Spring / springboot cinsinden) ve @ResponseBody
bu durumda gerekli değildir.
Eğer kullanıyorsanız @Controller
Bahar web MVC bir görünüm döndürebilirsiniz.
@RestController
açıklamalı sınıflar aynıdır, @Controller
ancak @ResponseBody
işleyici yöntemleri ima edilir.
Aslında, dikkatli olun - tam olarak aynı değildirler.
Başvurunuz dahilinde herhangi bir önleme aracı tanımlarsanız, ek açıklama olarak eklenmiş Kontrolörlere uygulanmazlar @RestController
ancak@Controller
ek açıklama eklenmiş kontrol cihazlarıyla .
yani. önleme için yapılandırma:
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TemplateMappingInterceptor()).addPathPatterns("/**", "/admin-functions**").excludePathPatterns("/login**");
}
}
ve bir Bahar kontrolörünün beyanında:
@Controller
public class AdminServiceController {...
Ancak çalışacak
@RestController
public class AdminServiceController {...
sonlandırıcının kendisiyle ilişkilendirilmesini sağlamaz.
@RestController
İlkbahar 4x'te tanıtıldı. Bu ek açıklama aynı zamanda kendisi tarafından açıklanır, @Controller
bu yüzden eğer bir işe yaramazsa bunu @Controller
bir hata olarak bildirin.
Interceptor
bir etmek @RestController
.
Interceptor
a ekledim @RestController
.
Spring belgelerinde ( Spring RestController Belgeleri ) görebileceğiniz gibi Rest Controller ek açıklaması Controller ek açıklamasıyla aynıdır, ancak @ResponseBody öğesinin varsayılan olarak etkin olduğunu varsayarsak, tüm jsonlar java nesnelerine ayrıştırılır.
@RestController
Bahar 4.0.1'den beri verilmiştir. Bu denetleyiciler , @RequestMapping yöntemlerinin varsayılan olarak @ResponseBody anlambilimini aldığını belirtir.
Önceki sürümlerde, benzer işlevler aşağıdakiler kullanılarak elde edilebilir:
@RequestMapping
ile bağlanmış @ResponseBody
gibi@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml")
public @ResponseBody MyBean fetch(){
return new MyBean("hi")
}
<mvc:annotation-driven/>
JSON'u Jackson veya xml ile kullanmanın yollarından biri olarak kullanılabilir.
@XmlRootElement(name = "MyBean")
@XmlType(propOrder = {"field2", "field1"})
public class MyBean{
field1
field2 ..
//getter, setter
}
@ResponseBody
burada MVC arasında görünüm olarak kabul edilir ve bunun yerine doğrudan Dispatcher Servlet'ten gönderilir ve ilgili dönüştürücüler yanıtı text / html, application / xml, application / json gibi ilgili formatta dönüştürür.Ancak, Restcontroller zaten ResponseBody ve ilgili dönüştürücülerle birleştirilmiştir. İkincisi, burada, yanıtı dönüştürmek yerine, otomatik olarak http yanıtına dönüştürülür.
@Controller
döner View
. @RestController
döner ResponseBody
.
@RestController ek açıklaması, RESTful web hizmetlerinin oluşturulmasını kolaylaştırmak için Bahar 4.0'da tanıtıldı. @Controller ve @ResponseBody'yi birleştiren bir kolaylık ek açıklamasıdır; bu, denetleyici sınıfının her istek işleme yöntemine @ResponseBody ek açıklamasıyla ek açıklama koyma ihtiyacını ortadan kaldırır.
@Controller
: Bu açıklama yalnızca özel bir sürümüdür @Component
ve denetleyici sınıflarının sınıf yolu taramasına göre otomatik olarak algılanmasına olanak tanır.@RestController
: Bu ek açıklama otomatik olarak @Controller
eklenen @Controller
ve @ResponseBody
ek açıklama içeren özel bir sürümdür, bu nedenle @ResponseBody
eşleme yöntemlerimize eklememiz gerekmez .@Controller, JSP kullanan eski sistemlerde kullanılır. Gösterim döndürebilir. @RestController denetleyicinin JSON yanıt türü ile REST hizmetleri sağladığını işaretlemektir. böylece @Controller ve @ResponseBody ek açıklamalarını birlikte sarar.
@Controller ve @ResponseBody kullanmak yerine, @RestController, Spring 4.0 ve sonraki sürümlerde Rest API'lerini ortaya koyalım.