我正在重写一个用内部框架编写的旧REST服务来使用Spring。我有一个带有POST方法的Controller,它接受一个参数作为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中的旧属性名称。
答案 0 :(得分:1)
@JsonProperty
注释只能使用JSON格式,但您使用的是x-www-form-urlencoded
。
如果您无法更改POST类型,则必须编写自己的Jackson ObjectMapper:
@JsonProperty not working for Content-Type : application/x-www-form-urlencoded
答案 1 :(得分:0)
我也遇到过类似的情况,
请用@ModelAttribute("some_property")
替换@RequestBody
。
希望能帮助您!