在springboot中,如何在使用@ModelAttribute映射时重命名表单数据字段?



我正在使用spring-boot,在我的控制器中,我正在接收一个formData。我使用@ModelAttribute将请求映射到POJO,但是,formData名称并不统一。在这种情况下,@JsonProperty没有帮助。我正在寻找一些注释或方法,以便我可以在映射时重命名这些字段。

旋度样本——

curl --location --request POST 'http://localhost:8080/api/demo' 
--header 'Authorization: Bearer ' 
--form 'deviceID="123"' 
--form 'ASN="123"' 
--form 'portal="demoportal"' 
--form 'str_ScanData=@"/D:/sample.xml"'

My Controller sample-

@PostMapping(path = "/demo", consumes = {"multipart/form-data"}) public ResponseEntity<demoDto> demoController(
@ModelAttribute DemoRequest demoRequest)

My POJO for Request -

Class DemoRequest {
// what i have right now
private String deviceID;
private String ASN;
private String portal;
private MultipartFile str_ScanData;
// getter setters constructor
// What I want to have
private String deviceId; //camelcase
private String asn; //rename
private String portal;
private MultipartFile uploadedFile; //rename
}

我刚开始使用论坛和spring-boot。请让我知道如果我在错误的轨道或没有发布任何相关的信息。

这是一个相当古老的问题,但我刚刚遇到了同样的问题,并发现Spring(至少在spring-webflux中,但它应该对spring-web工作相同)在ModelAttributeMethodArgumentResolver中使用@ConstructorProperties注释。

这意味着可以在ModelAttribute中自定义字段命名:

public class DemoRequest {
private final String deviceId;
private final String asn; 
private final String portal;
private final MultipartFile uploadedFile;

@ConstructorProperties({"deviceID", "ASN", "portal", "str_ScanData"})
public DemoRequest(String deviceId, String asn, String portal, MultipartFile uploadedFile) {
this.deviceId = deviceId;
this.asn = asn;
this.portal = portal;
this.uploadedFile = uploadedFile;
}
}

最新更新