Spring annotation for REST layer - spring

I'm developing a RESTful service using ApacheCXF. I'm using Spring to inject the bean at each layer. I've three layer - REST layer, Service layer (Business logic layer) and DAO layer. I understand that we can annotate Service layer with #Service and DAO layer with #Repository but how do we annotate Rest class ? Do you suggest to annotate it with #Controller ? I've seen many examples where Rest class is annotated as #Controller if you're developing REST using Spring MVC. IMO, Spring MVC comes into play if you have deal with presentation layer as well (I may be wrong, don't have much idea about it) but this is just a web service which is hosted on one server to consume some data by some other application. I've not used Spring MVC in my past, but when would you suggest to develop REST services using Spring MVC? What's the benefit ?

If you're already using Spring, then Spring MVC is the way to write a RESTful service.
Prior to Spring 3, Spring MVC was very much focussed on traditional model-view-controller web apps that typically returned HTML to a web browser. Spring 3 added support for building RESTful services using Spring #Controllers typically configured to return JSON or XML payloads.
Rather than rehashing what's already been written, this blog post is a good introduction to the REST support that was added in Spring 3 and outlines a number of the benefits.

Related

is spring boot only for building rest api?

and if not what are more things that we can do with spring boot?
i know that we can build a whole web app(frontend and backend) in one spring boot application in the folder resource/template and resource/static but in the real world does somebody uses this method to create web application with the resource/template and resource/static?
and one more question what is used in the real world hibernate(with the SessionFactory or EntityManager) or JpaRepository in the spring data jpa?
No Spring Boot isn't just for REST APIs.
Spring Boot is "just" a mechanism for autoconfiguring a Spring Framework based application.
Therefore you can use and it does get used for all kinds of stuff.
REST APIs for webservices
Full web application using Spring MVC
SOAP services (or are they called SOAP dispensers?)
Reactive web applications
Command line tools
Batch jobs
Swing / JavaFX applications
...
Of course there are many more people writing web applications than Swing applications with or without Spring.
The kind of web application you describe and which I put under "Full web application using Spring MVC" is a very well established model and when done right way better aligned with the principles of REST than the average so called REST service. My very personal guess is: They will still be around when nobody remembers what Angular is.
For your additional question:
Your question sounds a little like the relation between JPA and Spring Data JPA might not be completely clear.
(see Spring Data JDBC / Spring Data JPA vs Hibernate)
Both are certainly used in real world projects. By definition more projects use JPA than Spring Data JPA since the first is a superset of the later.
This involves complete Spring history,
Actual motive of Spring was to enable loose coupling , so that unit tests can be easily performed . Spring MVC was for developing web applications with Model View Controller having their proper boundaries.
Then Spring Boot which enabled developer to focus on business logic then configurations. That's why spring boot is a good choice for microservices.
For JPA or hibernate query , many people prefer using JPARepositoy as again you just have to define entity for the repository and Spring boot automatically provides you queries like findById and so on.
In short Spring boot have made it really easy to run the applications with different configurations and environment smoothly.

Which Spring project is for RESTful Web Services as Spring Web-Service Project is for just SOAP based web services?

I was looking to implement RestFul Web Services using Spring so in all Spring Projects list I saw Spring Web Services.
But Strangely it's just for SOAP and no Restful web services!
Where is project for RestFul web Services? Is there any JAX-RS implementation of Restful Web Services?
( Actually, It should be part of Spring Web Services project as its a popular web Services architecture as SOAP itself)
For Creating ReSTful web using spring, two ways are there :
1.One very easy way to use Spring MVC project. Spring provides annotations specificto ReSTful web services if you are using Spring MVC project like #RestController etc.
2.One can also create ReSTful web services by following JAX-RS methodology. Using spring-boot-starter-jersey project. Using this one can get other core functionalities of spring framework like DI, AOP etc.

Spring rest and spring web mvc

I have an application that has a web front end handled by spring MVC as well as the same services should be exposed as REST services. So the MVC controllers and rest controllers doing nearly the same thing which results in duplicate code. Now, the question is what is the best practice for the current scenario?
You can refactor your MVC controllers to isolate computation/code services within a #Service or #Component classes and call those from your rest controller as well as MVC controller to get data out so at the same time you will be able to remove redundancy and you will be able to achieve both functionalities.

Spring contract-first REST

I have a Spring web application - which doesn't use Spring-based GUI, but Wicket - and I would like to build contract-first REST services.
I already have a contract defined in Swagger and I generate model and API artifacts. Swagger codegen generates either Spring Boot artifacts, or Spring MVC ones.
My intention is to use ideally just a model, and maybe API (controllers) from this generated code. But up to my knowledge/research, there is no simple way to have just simple REST service without MVC/Boot boilerplate.
Therefore my questions are:
Is it possible to build lightweight Spring-based REST service, without having "heavy" dependency of full Spring MVC/Spring Boot?
If not, which approach is more lightweight? Spring Boot, or Spring MVC?
You are misinterpreting the Spring ecosystem.
Spring MVC is THE rest web and web service library within Spring portfolio.
The same way as Spring-WS is THE soap web service library.
They are very similar in architecture and style of use.
The fact that Spring MVC is bundled with Spring Framework does not change the situation.
Spring Boot does not bring any new REST offering. It is just a bootstrap mechanism to start Java web server with web app already deployed from a plain main() method. Therefore if you see "Building REST web services with Spring Boot", it just means that it is Spring MVC bootstrapped by Spring Boot.
Therefore, the question to what is more lightweight is straightforward: Spring MVC.
To answer the question #2:
The usage of Spring MVC is more lighweight, then usage of Spring Boot:
Size of the WAR archive:
6,1 MB for Spring MVC
9,2 MB for Spring Boot
Number of libraries in WAR archive:
12 for Spring MVC
28 for Spring Boot

Advantage of Spring Rest Web Services over Servlet

What are the advantages of using Spring Rest Web Services over Core Servlet ?
As we know Spring Rest Web Services also use Servlet internally.
REST is a special kind of web service. Whether this is the right thing for your application varies. If it is you should use a framework/library that is designed for REST to make coding simpler. You might also want to have a look at JAX-RS.
If you need a non-REST web service Servlet may be an option, but there are other options, too.
REST is not a type of Web Service - it is an Architecture and specification - JAX-RS. Spring has its own REST implementation libraries primarily based on its MVC controller. I would recommend you not to go for Spring Rest Web Services until you have any Spring specific requirement (Though I cant think of any such requirement which cant be solved by other light wait JAX-RS implementations). Jersey is the most light weight JAX-RS reference implementation by Sun/Oracle which, has support for Spring as well which, can be plugged in on requirement basis.

Resources