VOOZH about

URL: https://dzone.com/articles/dont-complicate-spring-controllers-with-commotions

⇱ Don't Complicate Spring Controllers With Commotions


Related

  1. DZone
  2. Coding
  3. Frameworks
  4. Don't Complicate Spring Controllers With Commotions

Don't Complicate Spring Controllers With Commotions

Don't complicate things.

By Apr. 26, 19 · Presentation
Likes
Comment
Save
24.3K Views

Join the DZone community and get the full member experience.

Join For Free

@Controller Implementing Interface

You may get into the problem as described below

The mapped controller method class 'com.xyz.ABController'is not an instance of the actual controller bean instance 'com.sun.proxy.$Proxy108'.
If the controller requires proxying (e.g. due to @Transactional), please use class-based proxying.

So, it is better not to do the following:

Don’t

@Controller
public class SomeController implements SomeConcerenedInterface {

}


@Controller Extending Another @Controller

If the intent is to share the logic, it is better to do it with composition. In this case, the reason is you may end up exposing an endpoint unintentionally in  ChildController, which may be inherited from the  ParentController.

Further, that is the old way of doing things, before Annotations in Spring.

Don’t

@Controller
public class ParentController {

}

@Controller
public class ChildController extends ParentController {

}


Simple Controller

The best practice is to keep the @Controller class simple, as shown below (don’t implement the interface and don't extend another controller), @Controller should expose an endpoint, and the processing logic should be delegated to another abstraction. This way, logic can be shared across multiple  @Controllers if required.

Do

@Controller
public class SomeController {

}


@Controller Extending Another BasClass

This case should be avoided as much as possible. If possible, use composition here:

May Do

public class SomeBaseClassWithOutControllerAnnotation {
 //May contain methods Without @RequestMapping
}

**//Discouraged**
@Controller
public class SomeController extends SomeBaseClassWithOutControllerAnnotation {

}


Happy controlling!

Spring Framework

Published at DZone with permission of Mohammad Nadeem. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Building a CRUD Application With Spring and SimpleJdbcMapper
  • How to Marry MDC With Spring Integration
  • How Spring and Hibernate Simplify Web and Database Management
  • Functional Endpoints: Alternative to Controllers in WebFlux

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

Let's be friends: