当前位置: 首页 > 面试题库 >

Spring @ModelAttribute模型字段映射

蓟辰沛
2023-03-14
问题内容

我正在重写使用内部框架编写的旧REST服务,以使用Spring。我有一个带有POST方法的Controller,该方法采用一个参数作为POST或x-www- form-urlencoded正文。按照多个StackOverflow答案,我使用了@ModelAttribute批注并创建了一个模型。

我的问题是,旧的REST API在蛇形情况下使用属性名称-say
some_property。我希望我的Java代码遵循Java命名约定,因此在我的模型中该字段称为someProperty。我尝试像在DTO对象中一样使用@JsonProperty批注,但是这次没有用。仅当模型中的字段命名为时,我才设法使代码工作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



 类似资料:
  • 当json更改为(小写命名与Java字段名相同)时工作正常: 但是,我需要在JSON中使用大写字段命名。 看起来不起作用。 是正确的映射吗?

  • 如果我错了请纠正我。两者都可以用于数据绑定。 谢谢!!

  • Spring-data for mongodb特别对待名为“id”的字段:http://static.springsource.org/Spring-data/data-mongo/docs/1.0.0.m5/reference/html/#D0E1508,因为它试图将名为id的字段映射到mongodb中的_id字段。有办法禁用此行为吗?我希望mongodb ObjectId只映射到具有显式注释的

  • 字段选项 以下参数适用于所有字段类型。全部都是可选的。 null 如果是 True,Django 将允许在数据库该字段的值为 NULL。默认是 False。 blank 如果是 True,该字段被允许为空值。默认是 False。 !> 请注意,这不同于 null。null 纯粹是与数据库相关的,而 blank 与验证相关。如果一个字段有 blank=True,表单验证将允许输入一个空值。如果一个字

  • 在上一节中,字段的配置是这样的。S则是引入的Sequelize,为了编写方便,重命名了一下。 { email: S.STRING, name: S.STRING } 在 define 函数的声明里面,需要传入的字段配置项其实是 DefineAttributes 类型。 [name: string]: string | DataTypeAbstract | DefineAttribu

  • 问题内容: 如何使用Django的ORM和PostgreSQL后端存储二进制数据的“ blob”?是的,我知道Django对这种事情不屑一顾,是的,我知道他们更喜欢你使用ImageField或FileField来表示,但这足以说明我的应用程序不切实际。 我曾尝试通过使用TextField对其进行破解,但是当我的二进制数据未严格确认模型的编码类型(默认为unicode)时,会出现偶尔的错误。例如 问