Spring @ModelAttribute模型字段映射

时间:2018-04-23 16:16:10

标签: java spring spring-mvc

我正在重写一个用内部框架编写的旧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中的旧属性名称。

2 个答案:

答案 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

希望能帮助您!