2016-04-05 2 views
2

Привет всем У меня есть REST API весной загрузки, которые дублировали результат для каждого ключа и значения, как код нижеДублированный Результат Rest Service Spring загрузки

это мой объект

{ 
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, 
) 

и, наконец, это мое application.propreties

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 Uppercase table names после этой проблемы, я попытался заставить ее работать, и теперь я получил это

любая помощь или руководство будут оценены

+2

Потому что у вас есть 'public' поля и getters/seters ... Поля должны быть' private'. –

+0

@ M.Deinum, если у вас есть время, просто вопрос, почему при сопоставлении в нижнем регистре он не дублирует результат. –

+1

Поскольку свойство 'foo' определяется getter' getFoo'. Когда у вас есть поле 'Foo', у вас будет свойство' foo' и поле 'Foo', и потому, что оно открыто, оно открыто. –

ответ

3

Внести следующие изменения с тем, чтобы сделать класс Entity следовать правилам класса POJO: 1. Сделайте переменные, которые являются общедоступными к частному, например, изменить public String Nom ; до private String Nom; 1. Измените методы реализации, как показано ниже. Изменение

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

в

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

Заменить декларацию поле часть в классе сущностей на код ниже:

... 
@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; 
... 
0

Я предлагаю вам следовать собственно Java Bean стандартные соглашения об именах для переменных и методов.

Держите переменные члена частным.

Сепаратор JSON работает на открытых полях и методах геттера. Поскольку вы указали свои переменные-члены, начиная с буквы «Столица», а также есть геттер для того же, что и стандартное соглашение об именах Java. Следовательно, сериализатор Json обнаруживает их как два разных свойства, подлежащих сериализации.

0

Чтобы избежать подобных ошибок, вы можете также использовать зависимость Ломбок в pom.xml следующим образом:

<!-- 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 создаст все геттеры и сеттеры.

  2. @NoArgsConstructor создаст конструктор без аргументов.

  3. @AllArgsConstructor создаст все конструкторы args.

Таким образом, ваш код будет более чистым и менее подверженным ошибкам.

Смежные вопросы