我正在使用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;
}
}