Я переписываю старую службу REST, написанную на собственном фреймворке, для использования Spring. У меня есть контроллер с методом POST, который принимает параметр либо как POST, либо как тело x-www-form-urlencoded. После нескольких ответов StackOverflow я использовал аннотацию @ModelAttribute и создал модель.
Моя проблема в том, что старый REST API использует имя свойства в случае змейки - скажем, some_property. Я хочу, чтобы мой код Java соответствовал соглашениям об именах Java, поэтому в моей модели поле называется someProperty. Я пробовал использовать аннотацию @JsonProperty, как и в своих объектах DTO, но на этот раз это не сработало. Мне удалось заставить код работать, только если поле в модели было названо some_property. Вот мой пример кода:
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
@RequestMapping("/my/api/root")
public class SomethingController {
@PostMapping("/my/api/suffix")
public Mono<Object> getSomething(
@RequestParam(name = "some_property", required = false) String someProperty,
@ModelAttribute("some_property") Model somePropertyModel) {
// calling my service here
}
public class Model {
@JsonProperty("some_property")
private String someProperty;
private String some_property;
// Getters and setters here
}
}
Я ищу аннотацию или любой другой элегантный способ сохранить стиль именования Java в коде, но использую унаследованное имя свойства из REST API.




Аннотация @JsonProperty может работать только с форматом JSON, но вы используете x-www-form-urlencoded.
Если вы не можете изменить свой тип POST, вам нужно написать свой собственный Jackson ObjectMapper:
@JsonProperty не работает для Content-Type: application / x-www-form-urlencoded
@ ShaMan-H_Fel Хорошо, спасибо за отзыв, TIL.
Я тоже встречал похожий случай с вами,
Пожалуйста, замените @ModelAttribute("some_property") на @RequestBody.
Надеюсь помочь вам!
Я принимаю этот ответ, поскольку он привел меня к ответу на мой вопрос - нет элегантного способа добиться того, чего я хочу. Я не собираюсь писать тонны кода в эстетических целях. На данный момент нет подходящей аннотации (см. Проблему Spring Jira: jira.spring.io/browse/SPR-13433). Один из ответов на поставленный вами вопрос (не принятый) дайте статье, в которой показано несколько альтернативных подходов к решению этой проблемы. Вот ссылка: afitnerd.com/2017/05/24/…