나는 지금 저지를 시험하고 있으며, netbeans에서 웹 서비스를 설정하려면 this 링크를 따라 갔다. 엔티티 클래스와 내 REST 클래스가 있습니다. javafx2 클라이언트에서 객체 (이 경우 Users 객체)를 추가, 편집, 삭제, 요청할 수 있습니다.저지 생산 미디어 유형 충돌
그러나 지금은 간단한 인증을 위해 웹 서비스에 새 메서드를 추가하려고합니다. 우선은 Users.java 파일의 새 명명 된 쿼리 (Users.login) 추가 : 이후
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
@NamedQuery(name = "Users.login", query = "SELECT u FROM Users u WHERE u.username = :username AND u.password = :password"),
@NamedQuery(name = "Users.findById", query = "SELECT u FROM Users u WHERE u.id = :id"),
@NamedQuery(name = "Users.findByUserlevel", query = "SELECT u FROM Users u WHERE u.userlevel = :userlevel"),
@NamedQuery(name = "Users.findByDisabled", query = "SELECT u FROM Users u WHERE u.disabled = :disabled")
})
을 내 UsersFacadeREST.java 파일에 코드를 다음 추가 된 (넷빈즈 7.2에 의해 생성) :
@GET
@Path("{username}/{password}")
@Produces({"application/xml", "application/json"})
public Users login(@PathParam("username") String username, @PathParam("password") String password) {
return em.createNamedQuery("login", Users.class)
.setParameter("username", username)
.setParameter("password", password)
.getSingleResult();
}
웹 서비스 배포하려고 할 때
그러나, 나는 오류를 다음 수신 :이에 새로 온 사람으로
SEVERE: Producing media type conflict. The resource methods public entities.Users service.UsersFacadeREST.login(java.lang.String,java.lang.String) and public java.util.List service.UsersFacadeREST.findRange(java.lang.Integer,java.lang.Integer) can produce the same media type
를, 내가 로그인() 메소드는 findRange와의 충돌을주는 이유 단서가 없다()? 첫 번째는 String 매개 변수가 2 개이며 Users 객체를 제공하고 두 번째 매개 변수는 두 개의 정수 매개 변수를 가지며 List 객체를 반환합니다. 슈퍼 클래스의
@GET
@Path("{from}/{to}")
@Produces({"application/xml", "application/json"})
public List<Users> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
return super.findRange(new int[]{from, to});
}
코드 (AbstractFacade.java)
: 나는 거 내 웹 서비스에 추가 된 일부 사용자 지정 쿼리가 필요 해요로이 문제를 해결 할 수있는 방법 ... 완료이 있습니까
public List<T> findRange(int[] range) {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0]);
q.setFirstResult(range[0]);
return q.getResultList();
}
답변 주셔서 감사합니다! 첫 번째 요점에 대해, 나는 자바 클라이언트에서 jax- rs webservice하지만 아직 하나도 찾을 수 없었습니다. 알고 계십니까? 두 번째 사항에 대해서, 예를 들어 사용자 컬렉션을 원하지만 다른 컬렉션을 제공하는 다른 이름의 쿼리가 있습니다 (국가별로 필터링 된 사용자, 액세스 수준 등 ...) 쿼리 매개 변수를 사용하여 메서드가 어떤 쿼리를 실행해야하는지 알 수 있도록하는 좋은 해결책입니까? 예 : myapp.com/calendar/events?qry = byCountry 또는 qry = byAccessLevel – Perneel
1) 가장 간단한 방법은 HTTP BASIC 인증을 사용하는 것입니다. SSL (HTTPS)를 사용하여 - 인터넷 검색을 시도해보십시오. 2) 네, 쿼리 매개 변수에 필터를 지정하는 것이 좋습니다 –
최고, 시간 주셔서 감사합니다. – Perneel