web-dev-qa-db-fra.com

Type de contenu 'multipart / form-data; limite = ----...; charset = UTF-8' non pris en charge

Je veux envoyer un objet au contrôleur qui a plusieurs listes avec des fichiers et plusieurs champs avec du texte brut.

public class ContributionNew<T extends MovieInfoDTO> {
    private List<T> elementsToAdd;
    private Map<Long, T> elementsToUpdate;
    private Set<Long> idsToDelete;
    private Set<String> sources;
    private String comment;
}

public class Photo extends MovieInfoDTO {
    private MultipartFile photo;
}

@PostMapping(value = "/{id}/contributions/photos")
@ResponseStatus(HttpStatus.CREATED)
public
ResponseEntity<Void> createPhotoContribution(
        @ApiParam(value = "The movie ID", required = true)
        @PathVariable("id") final Long id,
        @ApiParam(value = "The contribution", required = true)
        @RequestBody @Valid final ContributionNew<Photo> contribution
) {

J'envoie des données en utilisant facteur . Cependant, il me jette

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarywY7ByvgonAjDoaCT;charset=UTF-8' not supported

Que dois-je définir le type de contenu pour ce contrôleur afin que je puisse envoyer un objet qui a des champs de texte brut et des listes avec des fichiers?

Si je mets l'en-tête dans l'en-tête

Content-type: multipart/form-data; charset=utf-8

ça me jette dans la console

org.Apache.Tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
9
sdafasdf

dans postman, vous devez définir le corps comme étant de type raw, et dans le menu déroulant, vous pouvez sélectionner JSON, j'ai eu un problème similaire, cela a résolu mon problème . voir l'écran ici

12
plue

Comme dit dknight @RequestBody signifie l'utilisation de données JSON ou XML avec des cartes de votre bean DTO. Dans le cas de MultipartFile, vous ne pouvez pas utiliser de données JSON, vous ne pouvez donc pas utiliser @RequestBody. Essayez avec l'annotation @ModelAttribute.

Échantillon de travail:

@PostMapping("/promoters")
@Timed
public ResponseEntity<PromoterDTO> createPromoter(@ModelAttribute PromoterDTO promoterDTO) throws URISyntaxException { ... }

Avec PromoterDTO comme ceci:

    public class PromoterDTO implements Serializable {

        private Long id; 

        private String name;

        private String address;

        private MultipartFile logo;
    }
8
uncleBounty

Au lieu de @RequestBody, utilisez @ModelAttribute comme,

@PostMapping(value = "/{id}/contributions/photos")
@ResponseStatus(HttpStatus.CREATED)
public
ResponseEntity<Void> createPhotoContribution(
        @ApiParam(value = "The movie ID", required = true)
        @PathVariable("id") final Long id,
        @ApiParam(value = "The contribution", required = true)
        @ModelAttribute @Valid final ContributionNew<Photo> contribution
) {
0
Chirag Shah

Au lieu de @RequestBody, utilisez @RequestParam !!!

0
Shadab Reza