Requête Http Post avec un type de contenu application/x-www-form-urlencoded pas de travail au Printemps

Am nouveau à spring actuellement je suis en train d'essayer de faire application de requête HTTP POST / x-www-form-url encodé mais quand je garde cela dans mes en-têtes puis printemps ne pas reconnaître et dire 415 Unsupported Media Type au lieu de x-www-form-urlencoded

org.springframework.Web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded' non pris en charge

Peut-on savoir comment le résoudre? merci commentaire de moi.

un exemple de mon contrôleur est:

@RequestMapping(value = "/patientdetails", method = RequestMethod.POST, headers="Accept=application/x-www-form-urlencoded")
public @ResponseBody List<PatientProfileDto> getPatientDetails(
        @RequestBody PatientProfileDto name) {


    List<PatientProfileDto> list = new ArrayList<PatientProfileDto>();
    list = service.getPatient(name);
    return list;
}
6
demandé sur Alfabravo 2016-01-14 07:58:48

3 réponses

le problème est que lorsque nous utilisons application/x-www-form-urlencoded , Spring ne le comprend pas comme un RequestBody. Donc, si nous voulons utiliser cette nous devons supprimer l'annotation @RequestBody .

puis essayez ce qui suit:

@RequestMapping(value = "/patientdetails", method = RequestMethod.POST,consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public @ResponseBody List<PatientProfileDto> getPatientDetails(
        PatientProfileDto name) {


    List<PatientProfileDto> list = new ArrayList<PatientProfileDto>();
    list = service.getPatient(name);
    return list;
}

Note supprimant l'annotation @RequestBody

25
répondu Douglas Ribeiro 2016-07-07 18:37:04

vous devez indiquer à Spring quel type de contenu d'entrée est pris en charge par votre service. Vous pouvez le faire avec L'élément D'Annotation "consumes" qui correspond à l'en-tête "Content-Type" de votre requête.

@RequestMapping(value = "/", method = RequestMethod.POST, consumes = {"application/x-www-form-urlencoded"})

il serait utile si vous affichiez votre code.

1
répondu SpeaksBinary 2016-01-14 05:11:23

la chose la plus facile à faire est de définir le type de contenu de votre requête ajax À" application/json; charset=utf-8 " et ensuite de laisser votre méthode api consommer json. Comme ceci

var basicInfo = JSON.stringify(
                    {
                        firstName : playerProfile.firstName(),
                        lastName : playerProfile.lastName(),
                        gender : playerProfile.gender(),
                        address : playerProfile.address(),
                        country : playerProfile.country(),
                        bio : playerProfile.bio()
                    });

 $.ajax({
                    url: "http://localhost:8080/social/profile/update",
                    type: 'POST',
                    dataType: 'json',
                    contentType: "application/json; charset=utf-8",
                    data: basicInfo,
                    success: function(data) {



                    }
                });


@RequestMapping(value = "/profile/update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> UpdateUserProfile(@RequestBody User usersNewDetails, HttpServletRequest request, HttpServletResponse response){

je devine que le problème est que la botte de ressort a des problèmes de soumettre des données de formulaire qui ne sont pas json via la demande ajax. Note: le type de contenu par défaut pour ajax est "application/x-www-form-urlencoded "

0
répondu Eshiett Oto-obong 2017-10-27 21:38:07