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'
귀하의 응용 프로그램 서버에 대한 서버 측 로깅이 설정되어 있습니까? 거기에 스택 추적을 게시 할 수 있습니까? –
위의 이유가 데이터베이스에서 검색된 객체가 JSON으로 $ .ajax에 의해 인식되지 않는다면 나는 단지 생각하고 있습니다. 나의 고객 클래스의 "@XmlRootElement"는 고객을 XML과 동시에 JSON에 캐스팅하는 책임이 있습니다. 데이터베이스에서받은 객체가 동일한 경로를 거치지 않아 "@XmlRootElement"가 존재하지 않습니다. 내 개체에 적용됩니다. 그게 가능한가, 그렇다면 새로운 아이디어를 생성하고 하나의 속성을 다른 속성으로 적용하지 않고이를 어떻게 해결할 수 있을지 생각해 보라. – kazzzhc