Passer un objet de javascript à spring controller

achrefBIG Messages postés 40 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Je t'invite à regarder cet article : https://forums.commentcamarche.net/forum/affich-37598446-implementation-d-une-architecture-multi-tiers-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;
    }
    0