Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

unidades:10_servidor:06_controlador [2014/09/02 19:35]
admin [Exception]
unidades:10_servidor:06_controlador [2014/09/15 09:15] (actual)
admin [Referencias]
Línea 191: Línea 191:
     }     }
     ​     ​
-    @RequestMapping(value="/​SeguroMedico}",​method=RequestMethod.POST)+    @RequestMapping(value="/​SeguroMedico",​method=RequestMethod.POST)
     public void insert(@RequestBody String jsonEntrada) {     public void insert(@RequestBody String jsonEntrada) {
         ​         ​
Línea 234: Línea 234:
     }     }
     ​     ​
-    @RequestMapping(value="/​SeguroMedico}",​method=RequestMethod.POST,​consumes = "​application/​json",​produces = "​application/​json"​)+    @RequestMapping(value="/​SeguroMedico",​method=RequestMethod.POST,​consumes = "​application/​json",​produces = "​application/​json"​)
     public void insert(@RequestBody String jsonEntrada) {     public void insert(@RequestBody String jsonEntrada) {
         ​         ​
Línea 299: Línea 299:
     }     }
  
-    @RequestMapping(value = "/​SeguroMedico}", method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)+    @RequestMapping(value = "/​SeguroMedico",​ method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)
     public void insert(HttpServletRequest httpServletRequest,​ @RequestBody String jsonEntrada) {     public void insert(HttpServletRequest httpServletRequest,​ @RequestBody String jsonEntrada) {
  
Línea 348: Línea 348:
     }     }
  
-    @RequestMapping(value = "/​SeguroMedico}", method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)+    @RequestMapping(value = "/​SeguroMedico",​ method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)
     public void insert(HttpServletRequest httpServletRequest,​ @RequestBody String jsonEntrada) {     public void insert(HttpServletRequest httpServletRequest,​ @RequestBody String jsonEntrada) {
         try {         try {
Línea 444: Línea 444:
     }     }
  
-    @RequestMapping(value = "/​SeguroMedico}", method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)+    @RequestMapping(value = "/​SeguroMedico",​ method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)
     public void insert(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse,​ @RequestBody String jsonEntrada) {     public void insert(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse,​ @RequestBody String jsonEntrada) {
         try {         try {
Línea 531: Línea 531:
     }     }
  
-    @RequestMapping(value = "/​SeguroMedico}", method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)+    @RequestMapping(value = "/​SeguroMedico",​ method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)
     public void insert(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse,​ @RequestBody String jsonEntrada) {     public void insert(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse,​ @RequestBody String jsonEntrada) {
         try {         try {
Línea 606: Línea 606:
     }     }
  
-    @RequestMapping(value = "/​SeguroMedico}", method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)+    @RequestMapping(value = "/​SeguroMedico",​ method = RequestMethod.POST,​ consumes = "​application/​json",​ produces = "​application/​json"​)
     public void insert(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse,​ @RequestBody String jsonEntrada) {     public void insert(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse,​ @RequestBody String jsonEntrada) {
         try {         try {
Línea 639: Línea 639:
 Como la página web que estas ahora mismo leyendo ya se está haciendo un poco larga , vamos a poner el código solo del tratamiento de la excepción ''​BussinessException''​. Como la página web que estas ahora mismo leyendo ya se está haciendo un poco larga , vamos a poner el código solo del tratamiento de la excepción ''​BussinessException''​.
  
-<sxh java>+<sxh java;highlight: [2,3]>
         } catch (BussinessException ex) {         } catch (BussinessException ex) {
             List<​BussinessMessage>​ bussinessMessage=ex.getBussinessMessages();​             List<​BussinessMessage>​ bussinessMessage=ex.getBussinessMessages();​
Línea 669: Línea 669:
 Como la página web que estas ahora mismo leyendo ya se está haciendo un poco larga , vamos a poner el código solo del tratamiento de la excepción ''​Exception''​. Como la página web que estas ahora mismo leyendo ya se está haciendo un poco larga , vamos a poner el código solo del tratamiento de la excepción ''​Exception''​.
  
-<sxh java;​highlight:​ [4]>+<sxh java;​highlight:​ [2,4]>
             httpServletResponse.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);​             httpServletResponse.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);​
             httpServletResponse.setContentType("​text/​plain;​ charset=UTF-8"​);​             httpServletResponse.setContentType("​text/​plain;​ charset=UTF-8"​);​
Línea 682: Línea 682:
   * Línea 4: Aqui es donde se llama al método ''​printStackTrace()''​ que permite retornar los datos de la excepción. Por desgracia como el método puede lanzar una excepción la tratamos en la línea 6 generando una línea de log ya que no podemos retornar la información al usuario ya que ha fallado justamente eso.   * Línea 4: Aqui es donde se llama al método ''​printStackTrace()''​ que permite retornar los datos de la excepción. Por desgracia como el método puede lanzar una excepción la tratamos en la línea 6 generando una línea de log ya que no podemos retornar la información al usuario ya que ha fallado justamente eso.
 ===== El resto de métodos del controlador ===== ===== El resto de métodos del controlador =====
 +Por fin hemos acabado de ver todo lo necesario para crearnos nuestros propios controladores,​ a continuación vamos a ver como son el resto de los métodos del controlador.
  
 +Como ya hemos explicado paso a paso un par de métodos, en lo que queda solo vamos a resaltar las líneas mas importantes.
 +
 +==== find ====
 +
 +<sxh java;​highlight:​ [4,5]>
 +    @RequestMapping(value = "/​SeguroMedico",​ method = RequestMethod.GET,​ produces = "​application/​json"​)
 +    public void find(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse) {
 +        try {
 +            List<​SeguroMedico>​ segurosMedicos = seguroMedicoDAO.findAll();​
 +            String jsonSalida = jsonTransformer.toJson(segurosMedicos);​
 +            ​
 +            httpServletResponse.setStatus(HttpServletResponse.SC_OK);​
 +            httpServletResponse.setContentType("​application/​json;​ charset=UTF-8"​);​
 +            httpServletResponse.getWriter().println(jsonSalida);​
 +            ​
 +        } catch (BussinessException ex) {
 +            List<​BussinessMessage>​ bussinessMessage=ex.getBussinessMessages();​
 +            String jsonSalida = jsonTransformer.toJson(bussinessMessage);​
 +            ​
 +            httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);​
 +            httpServletResponse.setContentType("​application/​json;​ charset=UTF-8"​);​
 +            try {
 +                httpServletResponse.getWriter().println(jsonSalida);​
 +            } catch (IOException ex1) {
 +                Logger.getLogger(SeguroMedicoController.class.getName()).log(Level.SEVERE,​ null, ex1);
 +            }
 +            ​
 +        } catch (Exception ex) {
 +            httpServletResponse.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);​
 +            ​
 +        }
 +
 +    } 
 +</​sxh>​
 +
 +<​note>​
 +Por simplificar el DAO y el controlador no se ha hecho que se puedan filtrar los datos, por lo que siempre se muestran todos los seguros médicos.
 +</​note>​
 +
 +==== update ====
 +
 +<sxh java;​highlight:​ [4,5,6]>
 +    @RequestMapping(value = "/​SeguroMedico/​{idSeguroMedico}",​ method = RequestMethod.PUT,​ consumes = "​application/​json",​ produces = "​application/​json"​)
 +    public void update(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse,​ @RequestBody String jsonEntrada,​ @PathVariable("​idSeguroMedico"​) int idSeguroMedico) {
 +        try {
 +            SeguroMedico seguroMedico = (SeguroMedico) jsonTransformer.fromJson(jsonEntrada,​ SeguroMedico.class);​
 +            seguroMedicoDAO.update(idSeguroMedico,​seguroMedico);​
 +            String jsonSalida = jsonTransformer.toJson(seguroMedico);​
 +            ​
 +            httpServletResponse.setStatus(HttpServletResponse.SC_OK);​
 +            httpServletResponse.setContentType("​application/​json;​ charset=UTF-8"​);​
 +            httpServletResponse.getWriter().println(jsonSalida);​
 +            ​
 +        } catch (BussinessException ex) {
 +            List<​BussinessMessage>​ bussinessMessage=ex.getBussinessMessages();​
 +            String jsonSalida = jsonTransformer.toJson(bussinessMessage);​
 +            ​
 +            httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);​
 +            httpServletResponse.setContentType("​application/​json;​ charset=UTF-8"​);​
 +            try {
 +                httpServletResponse.getWriter().println(jsonSalida);​
 +            } catch (IOException ex1) {
 +                Logger.getLogger(SeguroMedicoController.class.getName()).log(Level.SEVERE,​ null, ex1);
 +            }
 +
 +            ​
 +        } catch (Exception ex) {
 +            httpServletResponse.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);​
 +            httpServletResponse.setContentType("​text/​plain;​ charset=UTF-8"​);​
 +            try {
 +                ex.printStackTrace(httpServletResponse.getWriter());​
 +            } catch (IOException ex1) {
 +                Logger.getLogger(SeguroMedicoController.class.getName()).log(Level.SEVERE,​ null, ex1);
 +            }
 +        }
 +    }
 +</​sxh>​
 +
 +==== delete ====
 +
 +<sxh java;​highlight:​ [4,6]>
 +    @RequestMapping(value = "/​SeguroMedico/​{idSeguroMedico}",​ method = RequestMethod.DELETE,​ produces = "​application/​json"​)
 +    public void delete(HttpServletRequest httpServletRequest,​ HttpServletResponse httpServletResponse,​ @PathVariable("​idSeguroMedico"​) int idSeguroMedico) {
 +        try {
 +            seguroMedicoDAO.delete(idSeguroMedico);​
 +            ​
 +            httpServletResponse.setStatus(HttpServletResponse.SC_NO_CONTENT);​
 +            ​
 +        } catch (BussinessException ex) {
 +            List<​BussinessMessage>​ bussinessMessage=ex.getBussinessMessages();​
 +            String jsonSalida = jsonTransformer.toJson(bussinessMessage);​
 +            ​
 +            httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);​
 +            httpServletResponse.setContentType("​application/​json;​ charset=UTF-8"​);​
 +            try {
 +                httpServletResponse.getWriter().println(jsonSalida);​
 +            } catch (IOException ex1) {
 +                Logger.getLogger(SeguroMedicoController.class.getName()).log(Level.SEVERE,​ null, ex1);
 +            }
 +            ​
 +        } catch (Exception ex) {
 +            httpServletResponse.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);​
 +            ​
 +        }
 +
 +    }  ​
 +</​sxh>​
 +  * Línea 6: Destacar que no se retorna nada y por lo tanto el estado HTTP es ''​204 No Content''​
 +
 +===== REST Client =====
 +Para probar nuestra API REST no es necesario que creemos una aplicación en JavaScript con AngularJS , antes de hacer todo eso podemos probarla desde el propio navegador. Firefox dispone de un gran plugin llamado [[https://​addons.mozilla.org/​es/​firefox/​addon/​restclient/​|REST Client]]
 +
 +{{:​unidades:​10_servidor:​restclient.png?​nolink|}}
 +
 +Este plugin nos permite cambiar todos los parámetros de una petición HTTP como:
 +  * Metodo
 +  * URL
 +  * Cuerpo
 +  * Cabeceras
 +
 +Y ver todo lo que retorna el servidor:
 +  * Cabeceras
 +  * Estado
 +  * Cuerpo de la respuesta.
 +
 +Por ello es una manera ideal de depurar nuestro API REST y lo recomiendo mientras estamos desarrollando.
 +===== Comentarios finales =====
 +Aunque ya se ha comentado varias veces, la forma de hacer este controlador no es la mas adecuada si usas Spring. El motivo de ello es que Spring dispone de muchas utilidades que nos pueden ayudar a reducir tanto código repetido. Por ejemplo el tratamiento de errores debería estar solo una única vez y no repetido tantas veces. Un tutorial al respecto está en [[http://​spring.io/​blog/​2013/​11/​01/​exception-handling-in-spring-mvc|Exception Handling in Spring MVC]]
 +
 +Otra posible forma de mejorar el código sin depender tanto de Spring sería usar el patrón //​Template//​ al estilo de [[http://​docs.spring.io/​spring/​docs/​current/​javadoc-api/​org/​springframework/​jdbc/​core/​JdbcTemplate.html|JdbcTemplate]]
 +
 +Aun así el motivo de haberlo hecho de esta forma es para que aprendas todo lo que es necesario hacer y ahora ya estés en disposición de ver los problemas y busques información sobre como mejorarlo.
 +
 +
 +===== Ejemplo =====
 +El ejemplo de esta unidad es exactamente lo que acabamos de contar pero en un nuevo proyecto llamado "​seguros"​.
 +
 +<​note>​
 +Este ejemplo se encuentra en  git en [[https://​github.com/​logongas/​cursoangularjs/​tree/​master/​seguros]]
 +</​note>​
  
 +===== Referencias =====
 +  * [[http://​docs.spring.io/​spring/​docs/​current/​spring-framework-reference/​html/​mvc.html|16. Web MVC framework]]
 +  * [[http://​spring.io/​blog/​2013/​11/​01/​exception-handling-in-spring-mvc|Exception Handling in Spring MVC]]
unidades/10_servidor/06_controlador.1409679315.txt.gz · Última modificación: 2014/09/02 19:35 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0