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())正在引用字段 SurnameName。这就是为什么它将您的字段和 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;

与您的问题无关,但根据这些命名约定,您的 类 应该以大写字母开头(例如 PersonPersonControllerPersonRepository、. ..).