2016-04-11 4 views
0

Dies ist mein Personenobjekt.Fehler in einer REST-API fehlschlagen

persons 
+-------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+-------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| given_name | varchar(30) | NO |  | NULL |    | 
| family_name | varchar(30) | NO |  | NULL |    | 
+-------------+-------------+------+-----+---------+----------------+ 

Here's the method that does the posting, 




public static void addPerson(Person person) { 
      String givenName = person.getGivenName(); 
      String familyName = person.getFamilyName(); 

      String queryString = "INSERT INTO persons (given_name, family_name) VALUES (" + givenName + " , " + familyName +");"; 
      Connector connector = null; 
      try { 
       connector = Connector.getInstance(); 
       connector.executeQuery(queryString); 
      } catch (SQLException e1) { 

       e1.printStackTrace(); 
      } 

     } 

Hier ist die Service-Methode, die die POST tut, JAX-RS ist

@POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public void addPerson(Person person){ 

     TeacherService.addPerson(person); 
    } 

Das Problem mit, dass das Objekt gebucht wird nicht immer, wie in der Zeile nicht in der Datenbank gespeichert wird, wird .

+1

Ein Problem, das ich sehe, bezieht sich auf [dies] (http://stackoverflow.com/q/36482730/2587435) –

Antwort

0

Das Problem ist, diese Zeile:

String queryString = "INSERT INTO persons (given_name, family_name) VALUES (" + givenName + " , " + familyName +");"; 

Wie peeskillet erwähnt, das Problem sind die Anführungszeichen. Der Java-Code generiert, ist zum Beispiel:

-- From your code: 
INSERT INTO persons (given_name, family_name) VALUES (MyName , MyLastname); 
-- Should be: 
INSERT INTO persons (given_name, family_name) VALUES ('MyName' , 'MyLastname'); 

So Ihr Java-Code wird:

String queryString = "INSERT INTO persons (given_name, family_name) VALUES ('" + givenName + "' , '" + familyName +"');"; 

aber ich vorbereitete Anweisungen zu verwenden, empfehlen (oder parametrisierte Abfragen) SQL injection zu verhindern.

Verwandte Themen