如何获取从angular发送的Springboot中的表单值?

时间:2019-09-28 14:26:40

标签: spring-boot

我正在构建一个formData

const formulario = new FormData();

formulario.append('preco', this.formularioCasaVenda.get('preco').value);
formulario.append('foto_1', this.formularioCasaVenda.get('foto_1').value);
formulario.append('dormitorios', this.formularioCasaVenda.get('dormitorios').value);

我正在邮寄要求中发送它。

const httpOptions = {
  headers: new HttpHeaders({'Content-Type': 'multipart/form-data'})
};
return this.http.post<Casa>("http://localhost:8080/api/casas-venda", formData1).pipe(
  tap((product: Casa) => console.log(`added product w/ id=$`)),
  catchError(this.handleError<Casa>('addProduct'))
);

如何从Spring引导控制器访问dormitorios,foto_1,preco,以便填充模型?

我的“绝望”豁免。

  @CrossOrigin(origins = "http://localhost:4200")
@PostMapping("casas-venda")
public CasaVenda storeCasaVenda(@RequestParam("formulario") MultipartFile[] casaVenda){

      CasaVenda casaVendaDB = new CasaVenda();    
      casaVendaDB.setDormitorios(1);
      casaVendaDB.setPreco( Double.parseDouble(casaVenda[1].toString()));
      casaVendaDB.setPreco(900.00);


      return casaVendaDB;

   // return this.casaVendaRepositorio.save(casaVenda);

}

1 个答案:

答案 0 :(得分:1)

这是解决问题的一种方式:

@CrossOrigin(origins = "http://localhost:4200")
@PostMapping("/casas-venda")
public CasaVenda storeCasaVenda(@RequestParam("dormitorios") Integer dormitorios, 
           @RequestParam("preco") BigDecimal preco,
           @RequestParam("foto_1") MultipartFile foto) {

  CasaVenda casaVendaDB = new CasaVenda();    
  casaVendaDB.setDormitorios(dormitorios);
  casaVendaDB.setPreco(preco.doubleValue());

  // foto I am assuming is a file, so you receive it and you have to get the InputStream from it.

  return casaVendaDB;

  // return this.casaVendaRepositorio.save(casaVenda);
}

一个提示:

  

不要在端点@Entity类中返回,这不是一个好习惯,相反,您应该创建一个DTO(数据传输对象),并且仅将它们需要知道的内容返回给Frontend。

https://martinfowler.com/eaaCatalog/dataTransferObject.html

希望我能为您提供帮助。