簡體   English   中英

結果重復休息服務春季啟動

[英]Duplicated Result Rest Service Spring boot

大家好,我有一個spring boot rest api,每個鍵和值的結果都重復,如下面的代碼

這是我的對象

{
id: 2,
Nom: "ee",
Prenom: "az",
Profil: "RC",
Pseudo: "aze",
Password: null,
role: null,
password: null,
nom: "ee",
prenom: "az",
profil: "RC",
pseudo: "aze"
},
{
id: 3,
Nom: "xx",
Prenom: "xxx",
Profil: "dataa",
Pseudo: "data",
Password: null,
role: null,
password: null,
nom: "xx",
prenom: "xxx",
profil: "dataa",
pseudo: "data"
},
{

如您所見,每一列都用大寫重復,第一個字母其他都用小寫

這是我的課:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;




@Entity
@Table(name="\"UTILISATEUR\"")
public class Utilisateur   {


@Id
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="\"IdUtilisateur\"")
public Long id ;
@Column(name="\"Nom\"")
public String Nom ; 
@Column(name="\"Prenom\"")
public String Prenom ; 
@Column(name="\"Profil\"")
public String Profil ; 
@Column(name="\"Pseudo\"")
public String Pseudo ; 
@Column(name="\"Password\"")
public String Password ;
@ManyToOne
@JoinColumn(name="\"id_role\"")
public Role role ;
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public String getNom() {
    return Nom;
}
public void setNom(String nom) {
    Nom = nom;
}
public String getPrenom() {
    return Prenom;
}
public void setPrenom(String prenom) {
    Prenom = prenom;
}
public String getProfil() {
    return Profil;
}
public void setProfil(String profil) {
    Profil = profil;
}
public String getPseudo() {
    return Pseudo;
}
public void setPseudo(String pseudo) {
    Pseudo = pseudo;
}


public String getPassword() {
    return Password;
}
public void setPassword(String password) {
    Password = password;
}
public Role getRole() {
    return role;
}
public void setRole(Role role) {
    this.role = role;
}
public Utilisateur(String nom, String prenom, String profil, String pseudo, String password,
        Role role) {
    super();
    Nom = nom;
    Prenom = prenom;
    Profil = profil;
    Pseudo = pseudo;

    Password = password;
    this.role = role;
}
public Utilisateur() {
    super();
}

正在使用我數據庫中的postgres,這是我的代碼

CREATE TABLE "UTILISATEUR"
(
"IdUtilisateur" serial NOT NULL,
"Nom" character varying(50),
"Prenom" character varying(50),
"Profil" character varying(50),
"Pseudo" character varying(20),
"IdSite" integer DEFAULT 0,
"Password" character varying(1024),
id_role integer,
 )

最后這是我的申請。

spring.datasource.url = jdbc:postgresql://localhost/baseecu
spring.datasource.username = postgres
spring.datasource.password =root


spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.database = MYSQL 
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto= update
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy

我認為這可能是一個jdbc問題,因為使用的是postgres 9.2,而jdbc是9.1的,我在JPA大寫表名稱之前的方言問題就解決了,我試圖使其工作,現在我明白了

任何幫助或指導將不勝感激

進行以下更改,以使Entity類遵循POJO類規則:1.進行對public到private的變量,如change public String Nom ; private String Nom; 1.更改如下的方法實現。 更改

public void setNom(String nom) {
Nom = nom;}

public void setNom(String nom) {
this.Nom = nom;}

用下面的代碼替換實體類中的字段聲明部分:

...
@Id
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="\"IdUtilisateur\"")
private Long id;
@Column(name="\"Nom\"")
private String Nom; 
@Column(name="\"Prenom\"")
private String Prenom; 
@Column(name="\"Profil\"")
private String Profil; 
@Column(name="\"Pseudo\"")
private String Pseudo; 
@Column(name="\"Password\"")
private String Password;
@ManyToOne
@JoinColumn(name="\"id_role\"")
private Role role;
...

我建議您為變量和方法遵循正確的Java Bean標准命名約定。

保持成員變量私有。

JSON序列化程序適用於公開顯示的字段和getter方法。 由於您已經以大寫字母開頭命名了成員變量,並且還存在遵循標准Java命名約定的getter。 因此,Json序列化程序將它們檢測為要序列化的兩個不同屬性。

為避免此類錯誤,還可以如下使用pom.xml中的lombok依賴項:

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.14</version>
    </dependency>

您的實體類別如下:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="\"UTILISATEUR\"")
public class Utilisateur   {


    @Id
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="\"IdUtilisateur\"")
    public Long id ;
    @Column(name="\"Nom\"")
    public String Nom ; 
    @Column(name="\"Prenom\"")
    public String Prenom ; 
    @Column(name="\"Profil\"")
    public String Profil ; 
    @Column(name="\"Pseudo\"")
    public String Pseudo ; 
    @Column(name="\"Password\"")
    public String Password ;
    @ManyToOne
    @JoinColumn(name="\"id_role\"")
    public Role role ;
}

所以在這里,

  1. @Data將創建所有的getter和setter。

  2. @NoArgsConstructor將創建一個無參數的構造函數。

  3. @AllArgsConstructor將創建一個所有args的構造函數。

因此,您的代碼將更干凈,錯誤更少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM