Por Qué Usar Spring Web MVC Framework


1.- Porque la asignación de qué método se ejecuta cuando se carga una URL se puede hacer con una annotation en forma directa y simple.

@Controller
public class User {
    @RequestMapping("/admin/user")
    public String listUsers(Model model) {
        model.addAttribute("users", this.userService.listAll());
        return "userList";
    }
}

Con sólo usar la annotation  @RequestMapping Spring sabe que cuando se ingrese la URL /admin/user hay que ejecutar el método listUsers de la clase User.

2.- Porque los controllers no son más que un objeto cualquiera que lleva una annotation.
En el ejemplo, la clase User no tiene nada en particular. No implementa ninguna interfaz ni hereda de ninguna clase en particular. Sólo se requiere anotarla con @Controller.

3.- Porque todas las validaciones se pueden hacer con annotations usando Bean Validation (JSR 303).

@ScriptAssert(
    lang = "Groovy",
    script = "_this.password.equals(_this.password2)",
    message="{password.confirm}")
public class UserDTO extends PersonDTO {

    @NotEmpty
    @Size(min=5,max=20)
    private String login;

    @Size(max=40)
    private String password;

    @Size(max=40)
    private String password2;
}

En este ejemplo, la clase UserDTO es el respaldo del formulario de alta de usuarios. En el caso del campo login, se valida que esté presente y que sea de entre 5 y 20 caracteres. El caso de la password, que sea como máximo de 40 y para verificar que coincidan ambas contraseñas ingresadas, se usa la annotation @ScriptAssert que permite realizar validaciones más complejas ejecutando código mediante un lenguaje de scripting (en este caso Groovy) sin tener que recurrir a codificar un validador propio.

Cuando el script fuera muy complejo se puede directamente invocar un método del objeto anotado de esta forma:

@ScriptAssert.List({
    @ScriptAssert(lang = "Groovy",
        script = "_this.checkQuery()",
        message = "{report.enterQuery}"),
    @ScriptAssert(lang = "Groovy",
        script = "_this.checkParameterCount()",
        message = "{report.paramCount}")})
public class ReportDTO extends EntityDTO {

    /* ... resto del código de la clase ... */

 public boolean checkParameterCount() {
        return this.parameters.size() == this.getExpectedParameters();
    }

    public boolean checkQuery() {
        return this.query != -1 || (this.sql != null && this.sql.length() > 10);
    }
}

Así se puede escribir en el mismo objeto que respalda el formulario uno o varios métodos que realicen validaciones y se los invoca desde la annotation usando un lenguaje de scripting directamente. En el ejemplo se ve cómo ejecutar varias validaciones cada una con su propio mensaje de error y su script.

4.- Porque permite manejar distintos tipos de request (GET, POST, PUT, DELETE, HEAD y OPTIONS) en forma individual o todos juntos.


// ...

    @RequestMapping(value = "/admin/report/edit", method = RequestMethod.GET)
    public ModelAndView editReportForm(
            @RequestParam(required = true, value = "id") int id) {
// ...
    @RequestMapping(value = "/admin/report/edit", method = RequestMethod.POST)
    public String editReport(
            @ModelAttribute("reportDto") @Valid ReportDTO report,
            BindingResult result,
            SessionStatus status) {
// ...

En el ejemplo, la misma URL, /admin/report/edit, es manejada por diferentes métodos del controller según que annotation se use. Típicamente en el GET se devolvería el formulario de edición con los datos cargados y en el POST se haría la edición según las modificaciones ingresadas por el usuario.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s