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;
}
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
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.
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 "