2017-12-12 10 views
0

JAX-RS 및 MySql 데이터베이스 (JPA)를 사용하여 API를 작성 중입니다. 나는 사용자 이름과 암호를 검증되는 방법을 다음과 세션 토큰을 생성 한 :JPA에서 반환 된 객체가 throw 됨 내부 서버 오류

public Customer validateCustomer(Customer customer) { 

    //get the customer from the database 
    Query q = em.createQuery("SELECT c from Customer c WHERE c.login = :username"); 
    q.setParameter("username", customer.getLogin()); 
    List<Customer> results = q.getResultList(); 

    //check if user exsists 
    if(!results.isEmpty()){ 
     Customer fromDb = results.get(0); 

     //check if user provided correct password 
     if (!fromDb.getPassword().equals(customer.getPassword())) { 
      return null; 
     } else { 
      //create the session token and save it to the database 
      Random random = new SecureRandom(); 
      String token = new BigInteger(130, random).toString(32); 
      tx.begin(); 
      int executeUpdate = em.createQuery("UPDATE Customer c SET c.token = :token WHERE c.id = :id") 
        .setParameter("token", token) 
        .setParameter("id", fromDb.getId()) 
        .executeUpdate(); 
      tx.commit(); 
      em.close(); 

      //update previously pulled customer with the token 
      fromDb.setToken(token); 

      //return the customer 
      return fromDb; 
     } 
    } else { 
     return null; 
    } 
} 

이 메소드에 의해 호출되어 사용되는 :

public Response login (Customer customer){ 
    Customer c = customerService.validateCustomer(customer); 
    if (c != null){ 
     return Response.status(Response.Status.OK).entity(c).build(); 
     //System.out.println(c); 
    } else { 
     return Response.status(Response.Status.FORBIDDEN).entity("Incorrect username or password.").build(); 
    } 
} 

내 문제는 올바른 로그인 때마다 그 제공하고 돌아 오는 중입니다

return fromDb;

나는 내 브라우저에서 내부 서버 오류 500 무엇입니까 : 500

문제에 접근/API/사용자/로그인

HTTP 오류. 이유 :

내부 서버 오류 부두에 의해 구동

: 나는 데이터베이스에서 기존 고객을 반환하고 때 //

그러나 오류는 ocures. 데이터베이스에서 반환 된 동일한 객체에서 새 Customer 객체를 작성하고 반환하면 올바르게 작동합니다.

Customer c = new Customer(); 
      c.setEmail(fromDb.getEmail()); 
      c.setLogin(fromDb.getLogin()); 
      c.setToken(token); 
      c.setId(fromDb.getId()); 

Db 대신 C를 반환하는 것이 좋습니다.

데이터베이스의 개체가 개체의 결과와 다른 결과를 반환 할 수있는 이유가 있습니까? fromDB (점점 오류) 반환 할 때

서버 로그 :

INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
[email protected] 
Returning: [email protected] 

오류 로그를 C에게 (오류) 모든

INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
[email protected] 
Returning: [email protected] 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
INFO: HHH000115: Hibernate connection pool size: 20 
INFO: HHH000006: Autocommit mode: true 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
INFO: HHH000046: Connection properties: {user=root, autocommit=true, release_mode=auto} 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
INFO: HHH000228: Running hbm2ddl schema update 
INFO: HHH000102: Fetching database metadata 
INFO: HHH000396: Updating schema 
INFO: HHH000261: Table found: test.account 
INFO: HHH000037: Columns: [balance, name, id, accnumber, sortcode] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer 
INFO: HHH000037: Columns: [password, city, street, county, name, id, login, email, token] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [primary] 
INFO: HHH000261: Table found: test.customer_account 
INFO: HHH000037: Columns: [account_id, customer_id] 
INFO: HHH000108: Foreign keys: [fk70eacecc22b4f18d, fk70eacecc3a281067] 
INFO: HHH000126: Indexes: [fk70eacecc22b4f18d, fk70eacecc3a281067, account_id] 
INFO: HHH000261: Table found: test.hibernate_sequences 
INFO: HHH000037: Columns: [sequence_next_hi_value, sequence_name] 
INFO: HHH000108: Foreign keys: [] 
INFO: HHH000126: Indexes: [] 
INFO: HHH000232: Schema update complete 
WARN: HHH000436: Entity manager factory name (Bank) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name' 
+0

귀하의 응용 프로그램 서버에 대한 서버 측 로깅이 설정되어 있습니까? 거기에 스택 추적을 게시 할 수 있습니까? –

+0

위의 이유가 데이터베이스에서 검색된 객체가 JSON으로 $ .ajax에 의해 인식되지 않는다면 나는 단지 생각하고 있습니다. 나의 고객 클래스의 "@XmlRootElement"는 고객을 XML과 동시에 JSON에 캐스팅하는 책임이 있습니다. 데이터베이스에서받은 객체가 동일한 경로를 거치지 않아 "@XmlRootElement"가 존재하지 않습니다. 내 개체에 적용됩니다. 그게 가능한가, 그렇다면 새로운 아이디어를 생성하고 하나의 속성을 다른 속성으로 적용하지 않고이를 어떻게 해결할 수 있을지 생각해 보라. – kazzzhc

답변

0

첫째을 반환하지 않는 경우, 쿼리는 확인되지 않습니다 : 당신이 할 수있는 ' 업데이트하는 동안 별칭을 사용하지 마십시오. 시도하십시오 em.createQuery("UPDATE Customer SET token = :token WHERE id = :id")

+0

내 검색어를 수정했지만 결과에 영향을 미치지 않았습니다. 그러나 의견을 보내 주셔서 감사 드리며, 더 숙련 된 사용자로부터 뭔가를 배울 수있어서 기쁩니다. 그것은 JPA (대학 프로젝트)를 사용하는 나의 첫 번째 프로젝트입니다. – kazzzhc

+0

오류가 무엇인지 확인하려면 응용 프로그램 로그를 찾으십시오. – romanvintonyak