#java #spring-boot #spring-annotations
Вопрос:
Я работаю с spring-boot, в моем контроллере я получаю данные формы. Я сопоставляю запрос с POJO, используя атрибут @ModelAttribute, однако имена данных формы неоднородны. В этом случае @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"'
Мой образец контроллера-
@PostMapping(path = "/demo", consumes = {"multipart/form-data"}) public ResponseEntity<demoDto> demoController(
@ModelAttribute DemoRequest demoRequest)
Мой POJO для запроса —
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
}
Я новичок в использовании форумов и весенней загрузки. Пожалуйста, дайте мне знать, если я нахожусь на неверном пути или не опубликовал никакой соответствующей информации.
Комментарии:
1. Поскольку an
@ModelAttribute
используется исключительно для привязки веб-формы к контроллеру, я просто точно воспроизвел атрибуты формы, даже если имена свойств не являются стандартными для Java, чтобы точно отразить содержимое формы. Я считаю, что для изменения имен потребуется специальная папка.2. Вы сохраняете свой dto, сопоставляя поля формы и используя @Column или JsonProperty в классе сущностей.
3. Спасибо @chrylis-осторожно оптимистично — я бы оставил его с тем же именем, что и данные формы, но мой сонар продолжает звонить :D. Поэтому я подумал , что должен быть какой-то способ.
4. Я бы сказал, что это конкретный случай, когда подавление предупреждений сонара оправдано.
5. @Alien Я хотел в основном переименовать поля в моем dto, так как поля формы несовместимы.