Je suis nouveau pour le printemps, je suis en train de faire HTTP POST demande application/x-www-formulaire-url codé mais quand je garde cela dans mes en-têtes, puis le printemps ne le reconnaît pas et dit 415 Unsupported Media Type
.__ x-www-form-urlencoded
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded' non pris en charge
Quelqu'un peut-il savoir comment le résoudre? s'il vous plaît commentez-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;
}
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 ce fichier .__, nous devons supprimer l’annotation @RequestBody .
Ensuite, 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;
}
Notez que l’annotation a été supprimée @RequestBody
vous devez remplacer @RequestBody par @RequestParam et ne pas accepter les paramètres avec une entité Java.
Ensuite, votre contrôleur est probablement comme ça:
@RequestMapping(value = "/patientdetails", method = RequestMethod.POST,
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public @ResponseBody List<PatientProfileDto> getPatientDetails(
@RequestParam Map<String, String> name) {
List<PatientProfileDto> list = new ArrayList<PatientProfileDto>();
...
PatientProfileDto patientProfileDto = mapToPatientProfileDto(mame);
...
list = service.getPatient(patientProfileDto);
return list;
}
Le plus simple est de définir le type de contenu de votre demande ajax sur "application/json; charset = utf-8", puis de laisser votre méthode api utiliser json. Comme ça
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 suppose que le problème est que spring boot pose des problèmes lors de la soumission de données de formulaire qui ne sont pas JSON via une requête ajax ..__ Remarque: le type de contenu par défaut pour ajax est "application/x-www-form-urlencoded"
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 "consommé" qui correspond à l'en-tête "Type de contenu" de votre demande.
@RequestMapping(value = "/", method = RequestMethod.POST, consumes = {"application/x-www-form-urlencoded"})
Il serait utile que vous publiiez votre code.