首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有零参数的角4多部分形式

具有零参数的角4多部分形式
EN

Stack Overflow用户
提问于 2017-09-05 16:50:19
回答 1查看 829关注 0票数 1

大家好,我有一个问题,在张贴一个多部分的表单-数据的角4.3 + Spring应用程序。无论我在Java方法中作为参数放置什么,我都会得到消息"Required request part 'arquivo‘是不存在的“或者”必需的请求参数'arquivo’不存在“。

以下是表单代码的一部分:

代码语言:javascript
复制
<form (ngSubmit)="onFormSubmit()" [formGroup]="formulario" enctype="multipart/form-data">
          <div formGroupName="sumarizacao">
            <div class="row">

       <!-- Nome da sumarização -->
              <div class="form-group col-sm-3">
                <label for="summarizationName">*Nome da Sumarização</label>
                <input type="text" class="form-control" id="summarizationName" formControlName="nome" placeholder="Nome">
                <div *ngIf="formulario.controls['sumarizacao'].controls['nome'].errors && formulario.controls['sumarizacao'].controls['nome'].dirty"><small> Campo obrigatório</small></div>
              </div>

  <!-- control file upload -->
            <div class="form-group col-sm-9">
              <label class="form-control-label custom-submit" id="controlFileLabel" for="envio-arquivo-ctl">Arquivo de controle</label>
              <i class="fa fa-check-circle" aria-hidden="true" *ngIf="file != null"></i>
              <div>
                <input type="file" id="envio-arquivo-ctl" (change)="fileEvent($event)" accept=".ctl">
                <div *ngIf="file != null"><p>{{file.name}}</p></div>
                <div *ngIf="formulario.controls['arquivo'].name != '' && formulario.controls['arquivo'].dirty"><small> Campo obrigatório</small></div>
              </div>
            </div>
         </div>
          <button type="submit" class="btn btn-sm btn-primary" [disabled]="formulario.invalid"><i class="fa fa-check" aria-hidden="true"></i> Gravar</button>
          <button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Resetar</button>
        </form>

邮政法:

代码语言:javascript
复制
  salvarSumarizacao(formGroup: FormGroup): Observable<Sumarizacao> {
    let formData = new FormData();
    let header = new HttpHeaders().set('enctype', 'multipart/form-data').set('Accept', 'application/json');
    formData.append('sumarizacao', JSON.stringify(formGroup.value.sumarizacao));
    if (formGroup.value.arquivo !== '') {
      formData.append('arquivo', formGroup.value.arquivo, formGroup.value.arquivo.name);
    }
    return this.http.post(URIConstantes.SUMARIZACAO, formData, { headers: header })
      .map(resp => resp as Sumarizacao)
      .catch(this.handleErrorObservable)
  }

当我打印formData或formGroup时,它看起来很好,所有的数据都在那里,但是当它到达后端时,它就崩溃了。

代码语言:javascript
复制
 @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA)
    @Produces({MediaType.APPLICATION_JSON})
    public Response incluir(@RequestParam(value="arquivo") MultipartFile arquivo, @RequestParam(value = "sumarizacao") Sumarizacao sumarizacao, HttpServletRequest request) {
        ObjectMapper mapper = new ObjectMapper();
        //sumarizacao = mapper.readValue(request.getParameter("sumarizacao"), Sumarizacao.class);
        //Sumarizacao sumRetorno = sumarizacaoService.incluir(sumarizacao, arquivo.getInputStream());
        RetornoResourceDTO<Sumarizacao> retornoResourceDTO = RetornoResourceDTO.<Sumarizacao> criarComResultado(new Sumarizacao());
        adicionarMensagemSucesso(retornoResourceDTO);
        return Response.ok(retornoResourceDTO).build();

    }
  • 当我将HttpServletRequest作为参数时,它给出了空multiPartfiles和MultipartParametersName
  • 当我放置参数(@RequestBody字符串测试)时,“test”字符串将给出整个请求主体(所有表单数据和文件数据都是字符串,包括边界)。
  • 当我发布到http://httpbin.org/post时,它可以工作,我得到的响应是:在这里输入图像描述

我尝试过使用@RequestPart,@RequestParam,在这两种情况下,它都显示了“必需的param/部件不存在”。我还尝试使用@FormDataParam,对象为null。:(

EN

回答 1

Stack Overflow用户

发布于 2017-09-15 12:29:51

我让它使用MultipartHttpServletRequest参数和CommonMultipartResolver bean。

代码语言:javascript
复制
    @Bean
    public CommonsMultipartResolver commonsMultipartResolver() {
        final CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
        commonsMultipartResolver.setMaxUploadSize(-1);
        return commonsMultipartResolver;
    }


@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA, produces = MediaType.APPLICATION_JSON)
    public Response incluir(MultipartHttpServletRequest http) { }

我使用SpringBoot1.5.3、SpringSecurity3.2.10和Spring 4.3.8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46059865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档