Como dice el título, no estoy tan seguro de cómo realizar la solicitud al controlador y obtener los datos y usarlos en mi jsp. Digamos que tengo este controlador que me devuelve una lista de objetos de usuario, List

    @RequestMapping(value = "/findUsers", method = {RequestMethod.GET, RequestMethod.PUT}, consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<BaseAjaxResponse<List<UserDto>>> findUsers( @RequestBody UsersDto utenteDto ){
    //LOGIC GOES HERE
    return ResponseEntity.status(status).body(response);
}

Ahora, en mi archivo JSP, escribí algo como esto.

    <form>
       <input type="text" placeholder="name" id="name" value="name">
       <input type="text" placeholder="surname" id="surname" value="surname">
     <button type="submit" id="search">
    </form>

Esta es mi js.

     $("#search").click( function(evt){
    evt.preventDefault();
    searchUser();
}

    function searchUser(){
    var Url = "/findUsers"
    var User = new Object();
    User.name = $("#name").val();
    User.surname = $("#surname").val();
    $.ajax({
    url : handleContattoUrl,
    dataType : 'json',
    contentType : 'application/json; charset=UTF-8',
    type : 'POST',
    data: JSON.stringify(User)
});

Y aquí estoy atascado ... ¿Cómo recupero los datos y los uso?

0
Fergant 24 oct. 2019 a las 12:24

1 respuesta

La mejor respuesta

En primer lugar, lo mantendría simple.

Tal vez cambie su controlador de esta manera. Importante es que le digas a tu controlador qué parámetros quieres manejar. Puede usar @RequestParam o @PathVariable para decirle al controlador qué datos desea enviarle.

@RequestMapping(value="/findUsers") 
public @ResponseBody String findUsers (
    @RequestParam (required=false) String name, 
    @RequestParam (required=false) String surname) {

    ... // do something with the params

    return "everything worked fine";
}

Es de sentido común decirle al controlador que es responsable de una parte completa del dominio, ya que esto hace que su código sea más comprensible.

@Controller
@RequestMapping(value="/user")

Si lo hace así, no necesita la barra inclinada inicial en su función.

@RequestMapping(value="findUsers")

Por tanto, la URL de la solicitud será "mydomain.com/user/findUsers"

También es importante que en su código html los campos de entrada tengan el atributo de nombre establecido, ya que este es el nombre del parámetro al que se refiere el controlador cuando verifica la solicitud. De lo contrario, su controlador no sabrá qué parámetros debe procesar. Como esto

<input type="text" placeholder="name" id="name" value="name" name="name">

Y por último, pero no menos importante, su solicitud ajax. Normalmente, no es necesario que especifique el tipo de datos de respuesta, ya que se seleccionará automáticamente. La URL no se escribe directamente porque de esta manera la URL siempre funcionará sin importar si se encuentra en un entorno de prueba o en su sistema en vivo. Puede importar el JSTL y utilizar esta etiqueta.

var name = $("#name").val();
var surname = $("#surname").val();

$.ajax({
    type: "POST",
    url: "<c:url value='/user/findUsers' />",
    data: {name: name, surname: surname},
    success: function(result) {
        ... // do something on success
    },
    error: function(error) {
        ... // catch error
    }
});

Esto funciona perfectamente para mí incluso con variaciones mucho más complejas.

1
M46 24 oct. 2019 a las 10:13