变量名称示例,例如
tId
、iPhone
、bLaBlAbLa
、testName
。
复制问题的步骤
TestModel.java
package com.test.IssueWithName.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public class TestModel {
private int tId;
private String iPhone;
private int bLaBlAbLa;
private String testName;
}
TestController.java
package com.test.IssueWithName.controller;
import com.test.IssueWithName.model.TestModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("test")
public TestModel responseNamingIssue() {
return new TestModel(1, "15 ultra super duper pro max", 4, "testingNameIssues bla bla");
}
}
IssueWithNameApplication.java
(主课)
package com.test.IssueWithName;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class IssueWithNameApplication {
public static void main(String[] args) {
SpringApplication.run(IssueWithNameApplication.class, args);
}
}
击中时有反应
localhost:<port>/test
{
"testName": "testingNameIssues bla bla",
"tid": 1,
"iphone": "15 ultra super duper pro max",
"blaBlAbLa": 4
}
问题:
testName
正确遵循了camelCasing规则,但我猜tId
、iPhone
和bLaBlAbLa
命名变量在响应中失败了camelCasing。 tId
、iPhone
和bLaBlAbLa
分别变成了tid
、iphone
和blaBlAbLa
。
如果我在某个地方错了,请纠正我。感谢您的阅读。
Spring Boot 使用 Jackson 作为默认的序列化/反序列化库。
Jackson 序列化 POJO 时,会查找字段的默认 getter(带有前缀的方法用于布尔值,get 用于其他类型)。
您看到的问题是由于 Jackson 使用 Java Bean 命名约定来确定 Java 类中的 JSON 属性。
之前也提出过类似的问题。请检查下面提到的链接以获取与此问题相关的更多详细信息。 如果前导驼峰式单词只有一个字母长,为什么 Jackson 2 无法识别第一个大写字母? 回到你的问题,你可以通过在字段上使用 @JsonProperty 来解决这个问题,而不是使用 Lombok @Getter 注释来生成 getter 方法。它是 Jackson 库注释,您可以使用它来自定义 JSON 属性名称。 现在你的模型类将如下所示:
@AllArgsConstructor
公共类测试模型{
@JsonProperty
private int tId;
@JsonProperty
private String iPhone;
@JsonProperty
private int bLaBlA;
@JsonProperty
private String testName;
}
进行这些更改后,您将得到如下响应:
{ “tId”:1, “iPhone”:“我的电话”, “bLaBlA”:8, “测试名称”:“测试” }
我已经在本地测试了上面的代码并且工作正常。希望这可以帮助 快乐编码!