Spring MVC Vistas XML

En tutoriales anteriores hemos aprendido a generar vistas en formatos como: JSON, PDF, HTML, XLS, etc., en esta publicación le toca el turno a las vistas en formato XML, Spring MVC soporta este tipo de vistas sin necesidad de agregar librerías externas y sin configuraciones extensas, para el proyecto de ejemplo usaremos el desarrollado en el curso vistas en formato JSON, solo que esta vez la salida será en formato XML.

Las dependencias requeridas son:

<!-- Spring Web MVC -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>

<!-- Java Servlet y JSP -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>    

<!-- Lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.12</version>
</dependency>

La configuración solo requiere la presencia de la anotación @EnableWebMvc o la etiqueta XML <mvc:annotation-driven />, adicionalmente agregamos el código necesario para manejar vistas JSP, no es necesario, solo lo hacemos para mostrar diferentes vistas.

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {
    "carmelo.spring.controller",
    "carmelo.spring.service"})
public class WebAppConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
    }
}

Nuestro modelo de pruebas será la clase Customer, usaremos lombok para agilizar el desarrollo de la aplicación, la anotación JAXB @XmlRootElement indica que esta clase puede ser serializada a formato XML utilizándola como elemento raíz.

@Data
@NoArgsConstructor
@AllArgsConstructor
@XmlRootElement(name = "xcustomer")
public class Customer {
    private Long id;
    private String firstName;
    private String lastName;
    private String street;
    private String city;
}

Finalmente nuestro controlador, el primer método es usado para la vista JSP, el segundo responde con contenido XML, más específicamente el objeto Customer identificado con el id indicado como variable en la URL.

@Controller
public class CustomerController {

    @Autowired
    private CustomerService cs;

    @RequestMapping(value = {"/", "/index"})
    public String customerJsp(Model model) {
        model.addAttribute("customerList", cs.findAll());
        return "customer";
    }
    
    @ResponseBody
    @RequestMapping("/{id}")
    public Customer customerId(@PathVariable("id") Long id) {
        return cs.findById(id);
    }
}

Puedes ver más información sobre los controladores en Spring MVC Controladores, si ejecutamos y vemos el navegador, el resultado debe ser:

Spring MVC vistas en formato XML

La URL localhost:8084/customer/{id} nos devuelve el objeto con el ID indicado, en este caso 3, si no existe tal objeto se devuelve un objeto nulo, esta lógica la maneja la clase CustomerServiceImpl.

Si deseamos que la vista XML contenga una lista de elementos debemos crear una clase para manejar los mismos, esta clase solo debe encapsular la lista, del siguiente modo:

import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "customerList")
public class CustomerList {

    private List<Customer> customer;
    
    public CustomerList() { }
    
    public CustomerList(List<Customer> customerList) {
        this.customer = customerList;
    }
    
    public List<Customer> getCustomerList() {
        return customer;
    }

    public void setCustomerList(List<Customer> customerList) {
        this.customer = customerList;
    }
}

Agregaremos otro método al controlador, el mismo será el encargado de devolver la lista de elementos en la URL definida, localhost:8084/customer/all.

@ResponseBody
@RequestMapping("/all")
public CustomerList customerList() {
    return new CustomerList(cs.findAll());
}

La salida en el navegador web debe ser:

Usar vistas XML en aplicación web Spring MVC

Sobre el modelo podemos aplicar cualquiera de las anotaciones JAXB como: @XmlRootElement, @XmlElement, etc., recordemos que esta librería esta incluida en el JDK por lo que no requerimos añadir ninguna dependencia para utilizarla.

Descargar: springmvc-vistas-xml.zip

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

tkinter Canvas

Histogramas OpenCV Python

Python Binance API