rest api return postman 和 spring boot h2 中的重复值
rest api return duplicate values in postman and spring boot h2
我是新的 spring 引导开发人员,我正在尝试开发和休息 api。当我这样做时,我得到并发出我的 api return 邮递员中的两个重复响应。但是我没有编写任何代码来在我的代码中获取重复的值。重复值之一是我的模型类变量,另一个是 table 的属性名称。
低于邮递员的回复
型号class
public class person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY )
private Long id;
@Column(name = "name")
private String Name ;
@Column(name ="surname")
private String Surname;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getSurname() {
return Surname;
}
public void setSurname(String surname) {
Surname = surname;
}
}
存储库
@Repository
public interface personRepository extends JpaRepository<person,Long> {
}
控制器
@RestController
@RequestMapping("/person")
public class personController {
@Autowired
private personRepository repository;
public personController(personRepository repository) {
this.repository = repository;
}
@GetMapping("/view/list/person")
private List<person> viewperson() {
return repository.findAll();
}
@PostMapping("/insert/person")
private person savePerson(@RequestBody person obj) {
return repository.save(obj);
}
@DeleteMapping("/delete/{id}")
private void delete(@PathVariable Long id) {
repository.deleteById(id);
}
}
application.properties
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialec
t
问题是您在命名策略中没有遵循正确的约定。
因此,Jackson 不知道您的 getter(getSurname()
、getName()
)正在引用字段 Surname
和 Name
。这就是为什么它将您的字段和 getter 分别序列化为 JSON.
要解决此问题,您可以遵循 Java 命名约定并使用小写字母作为字段的第一个字符。
例如:
@Column(name = "name")
private String name; // Change this
@Column(name ="surname")
private String surname; // Change this
这会将您的 JSON 输出更改为:
{
"id": 1,
"name": "bryan",
"surname": "Nicky"
}
如果你想让你的 JSON 保持大写,你可以使用 @JsonProperty
注释:
@JsonProperty("Name") // Add this
@Column(name = "name")
private String name;
@JsonProperty("Surname") // Add this
@Column(name ="surname")
private String surname;
与您的问题无关,但根据这些命名约定,您的 类 应该以大写字母开头(例如 Person
、PersonController
、PersonRepository
、. ..).
我是新的 spring 引导开发人员,我正在尝试开发和休息 api。当我这样做时,我得到并发出我的 api return 邮递员中的两个重复响应。但是我没有编写任何代码来在我的代码中获取重复的值。重复值之一是我的模型类变量,另一个是 table 的属性名称。
低于邮递员的回复
型号class
public class person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY )
private Long id;
@Column(name = "name")
private String Name ;
@Column(name ="surname")
private String Surname;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getSurname() {
return Surname;
}
public void setSurname(String surname) {
Surname = surname;
}
}
存储库
@Repository
public interface personRepository extends JpaRepository<person,Long> {
}
控制器
@RestController
@RequestMapping("/person")
public class personController {
@Autowired
private personRepository repository;
public personController(personRepository repository) {
this.repository = repository;
}
@GetMapping("/view/list/person")
private List<person> viewperson() {
return repository.findAll();
}
@PostMapping("/insert/person")
private person savePerson(@RequestBody person obj) {
return repository.save(obj);
}
@DeleteMapping("/delete/{id}")
private void delete(@PathVariable Long id) {
repository.deleteById(id);
}
}
application.properties
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialec
t
问题是您在命名策略中没有遵循正确的约定。
因此,Jackson 不知道您的 getter(getSurname()
、getName()
)正在引用字段 Surname
和 Name
。这就是为什么它将您的字段和 getter 分别序列化为 JSON.
要解决此问题,您可以遵循 Java 命名约定并使用小写字母作为字段的第一个字符。
例如:
@Column(name = "name")
private String name; // Change this
@Column(name ="surname")
private String surname; // Change this
这会将您的 JSON 输出更改为:
{
"id": 1,
"name": "bryan",
"surname": "Nicky"
}
如果你想让你的 JSON 保持大写,你可以使用 @JsonProperty
注释:
@JsonProperty("Name") // Add this
@Column(name = "name")
private String name;
@JsonProperty("Surname") // Add this
@Column(name ="surname")
private String surname;
与您的问题无关,但根据这些命名约定,您的 类 应该以大写字母开头(例如 Person
、PersonController
、PersonRepository
、. ..).