Passer un objet de javascript à spring controller

Signaler
Messages postés
29
Date d'inscription
samedi 2 janvier 2021
Statut
Membre
Dernière intervention
1 mai 2021
-
Messages postés
16321
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
1 mai 2021
-
Bonjour, Je bloque sur un porblème depuis longtemps, mon objectif c'est de passer un objet de javascript à un controleur spring, mais j'obtiens toujours une erreur : There was an unexpected error (type=Bad Request, status=400).
Required request body is missing: public java.lang.String PersonController.addPerson(.entities.Person)
Voici le code en javascript:
<script>     

   var person = {"name":"John"};

 $.ajax({

            url:"http://localhost:8080/abc/addPerson",

            type: 'POST',

            data:  person,             

            dataType: "html",          

            contentType: 'application/json',

            mimeType: 'application/json',

            success: function(data){ 

                console.log(data);              

                return false;     

            } 

        });
    </script>


et voici mon contrôleur

@Controller
@RequestMapping("/abc")
public class PersonController {

	@RequestMapping(value = "/addPerson", method = { RequestMethod.GET, RequestMethod.POST })
	public @ResponseBody String addPerson(@RequestBody Person person)  {
		System.out.println(person.getName());
		return "Successfully added person";

	}
}





Configuration: Windows / Chrome 90.0.4430.85

1 réponse

Messages postés
16321
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
1 mai 2021
2 825
Bonjour,

Je t'invite à regarder cet article : https://www.commentcamarche.net/faq/56284-implementation-d-une-architecture-multi-tiers-en-jee-avec-spring
Et le code associé : https://codes-sources.commentcamarche.net/source/103029-implementation-d-une-architecture-multi-tiers-en-jee-avec-spring

C'est un projet de base qui fonctionne que tu peux modifier progressivement pour arriver à tes fins sans subir tous les écueils de tout faire de zéro.

Un petit focus sur le code JS :
function addUser(){
    var user = '{'
        + '"firstName":"' + document.getElementById("addUser_firstName").value
        + '", "lastName":"' + document.getElementById("addUser_lastName").value
        + '", "street":"' + document.getElementById("addUser_street").value 
        + '", "postCode":"' + document.getElementById("addUser_postCode").value
        + '", "city":"' + document.getElementById("addUser_city").value 
        + '"}';
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function(){
        document.getElementById("addUser_iframe").srcdoc = this.responseText;
        document.getElementById("allUsers_iframe").contentWindow.location.reload();
    }
    xhr.open('POST', '/users/new', true);
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(user);
    return false;
}

Et le code Spring correspondant :
@RestController
public interface UserWebService {

    @GetMapping("/users/all")
    public List<UserDto> getAllUsers();

    @PostMapping("/users/new")
    public UserDto postUser(@RequestBody UserDto user);
}

@Data
public class UserDto {
    private Long id;
    private String firstName;
    private String lastName;
    private String street;
    private String postCode;
    private String city;
}