2016-04-14 8 views
3

Mein Projekt handelt von einem User-Manager Web.Die Methode findOne() kann nicht im Spring Boot verwendet werden

Ich bin ein neuer Frühling und Java.

Hier ist mein Code: In dem Usercontroller

@RequestMapping(value="https://stackoverflow.com/users/{name}",method = RequestMethod.GET) 
public User showUser(@PathVariable("name") String name){ 
    return userService.findUser(name); 
} 

Im Userservice:

public User findUser(String name){ 
    return userRepository.findOne(name); 
} 

Und in dem Postbote, wenn ich dann auf den Link: http://localhost:8080/users/hunghip4 (hunghip4 ein Benutzer ich erstellt)

{ 
    "timestamp": 1460570912129, 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "org.springframework.dao.InvalidDataAccessApiUsageException", 
    "message": "Provided id of the wrong type for class  com.uet.dhqg.usermanage.model.User. Expected: class java.lang.Integer, got class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class com.uet.dhqg.usermanage.model.User. Expected: class java.lang.Integer, got class java.lang.String", 
    "path": "https://stackoverflow.com/users/hunghip4" 
} 

Das User-Modell:

@Entity 
@Table(name="user") 
public class User extends HypermediaLinks { 
@Id 
@Column(name="id") 
private int id; 
@Column(name="name") 
private String name; 
@Column(name="pass") 
private String pass; 

public int getId(){ 
    return id; 
} 

public String getName(){ 
    return name; 
} 

public void serName(String name){ 
    this.name = name; 
} 

public String getPass(){ 
    return pass; 
} 

public void serPass(String pass){ 
    this.pass = pass; 
} 

} 

Die UserRepository:

@Repository 
public interface UserRepository extends CrudRepository<User,String>{ 
} 
+0

Fügen Sie hier den Code für die Klasse 'User' hinzu. – manish

+0

Wir brauchen die 'UserRepository' Definition. – chrylis

Antwort

3

Ihre UserRepository ist definiert als CrudRepository<User,String>. Dabei ist User der Typ und String der Typ der ID. Ihre User Klasse hat jedoch ein ID-Feld vom Typ int NICHT vom Typ String.

Zuerst beheben Sie Ihre UserRepository, um eine korrekte Darstellung Ihrer User zu sein.

public interface UserRepository extends CrudRepository<User, Integer> {} 

Nächstes eine Methode erstellen Sie Ihre User mit Namen zu finden.

public User findByName(String name); 

Und rufen Sie dies von Ihrem Controller anstelle von findOne. Die findOne wird verwendet, um Entitäten zu finden, die auf ID basieren und nicht auf einem beliebigen Feld Ihrer Entität.

0

Wie die Ausnahme schlägt vor, Sie übergeben den Benutzernamen an die FindOne Methode. Gemäß der Methodensignatur in der Spring-Dokumentation erwartet die Methode findOne jedoch die ID, die ein Integer als Argument ist. Übergeben Sie die Benutzer-ID anstelle des Namens.

+0

Ich habe versucht, aber es sagt "in der CrudRepository kann nicht auf (int) angewendet werden" –

+0

Wenn Sie Integer ID an die findOne-Methode liefern, was ist die Ausnahme, die Sie erhalten? Bitte geben Sie das vollständige Ausnahmeprotokoll an. – VHS

0

ändern Repository Definition

public interface UserRepository extends CrudRepository<User,Integer> 

Ihre Benutzer-ID-Datentyp ist int, so dass Ihr Repository Id int auch sein sollte. mit dieser Ersetzung findOne Methode akzeptiert auch ganzzahligen Datentyp wie User ID ist.

Verwandte Themen