[英]All my Restful web services stopped working when I add new service
好的,我有一個包含兩個寧靜的Web服務類Login.class和Subscribe.class的包。 當我將它們部署到app引擎並測試它們時,它們可以工作。 現在我將新的服務類名稱User s.class添加到包中,現在當我調用它們時,我的服務都無效。我收到內部服務器錯誤。
com.sun.jersey.spi.inject.Errors processErrorMessages: The following errors and warnings have been detected with resource and/or provider classes:
嚴重:產生媒體類型沖突。 資源方法public javax.ws.rs.core.Response com.ppsjamaica.webservices.PPSUsers.getUserById(java.lang.Long)和public javax.ws.rs.core.Response com.ppsjamaica.webservices.PPSUsers.getUserByUsernamePassword( java.lang.String,java.lang.String)可以生成相同的媒體類型
Uncaught exception from servlet
com.sun.jersey.spi.inject.Errors com.sun.jersey.spi.inject.Errors.processErrorMessages上的$ ErrorMessagesException(Errors.java:170)
我的訂閱課是:
@Path ("/subscriber")
public class Subscribe {
@GET
@Produces (MediaType.APPLICATION_JSON)
public Response getSubscriber (@QueryParam("email")String email)
{
EntityManager entityManager = EMF.getInstance ().createEntityManager ();
/*
* Sends back a BAD_REQUEST HTTP status
* if email query parameter is empty
*/
if (email.isEmpty ())
return Response.status(Status.BAD_REQUEST).build ();
try
{
Query query = entityManager.createQuery ("SELECT FROM Subscriber WHERE email= :emailParam");
query.setParameter("emailParam", email);
return Response.status(Status.OK).entity((Subscriber) query.getSingleResult ()).build ();
}
catch (NoResultException e)
{
return Response.status (Status.NOT_FOUND).build ();
}
}//end Subscriber method
}
我的登錄類是:
@Path ("/login")
public class Login {
@GET
@Produces (MediaType.APPLICATION_JSON)
public User authenticate (@QueryParam("username") String username, @QueryParam("password")String password)
{
User user = new User ();
return user;
}//end authenticate method
@GET
@Path ("/Subscriber")
@Produces (MediaType.APPLICATION_JSON)
public Response getSubsriber (@QueryParam("email") String email)
{
EntityManager entityManager = EMF.getInstance ().createEntityManager();
try
{
Query query = entityManager.createQuery("SELECT FROM Subscriber WHERE email= :emailParam");
query.setParameter("emailParam", email);
Subscriber subscriber = (Subscriber)query.getSingleResult();
return Response.status(Status.OK).entity(subscriber).build ();
}
catch(Exception e)
{
throw new RuntimeException (e);
}
}//end getSubsriber method
}//end Login class
我的用戶類是:
@Path ("/users")
public class Users {
/**
* Gets all User objects from datastore. Returns
* NOT_FOUND HTTP Response status if no result
* found and OK HTTP Response status if it does with
* a list of User objects.
*
* URL: domain-name/services/users/all
*
* @author Mario Dennis
* @return Response
*/
@GET
@Path ("/all")
@Produces(MediaType.APPLICATION_JSON)
public Response getAllUsers ()
{
try
{
EntityManager entityManager = EMF.getInstance().createEntityManager();
Query query = entityManager.createQuery("SELECT FROM User");
@SuppressWarnings("unchecked")
List<User> user = (List<User>) query.getSingleResult ();
GenericEntity<List<User>> entity = new GenericEntity<List<User>>(user){};
return Response.status(Status.OK).entity(entity).build ();
}
catch (NoResultException e)
{
return Response.status(Status.NOT_FOUND).build ();
}
}//end getAllUsers method
/**
* Gets User object with user name and password specified from
* datastore. Returns NOT_FOUND HTTP Response status if no result
* found and OK HTTP Response status if it is found and BAD_REQUEST
* if parameter supplied is empty.
* a list of User objects.
*
* URL: domain-name/services/users/{username}&{password}
*
* @author Mario Dennis
* @return Response
*/
@GET
@Produces (MediaType.APPLICATION_JSON)
public Response getUserByUsernamePassword (@QueryParam("username")String username,@QueryParam("password") String password)
{
/*
* Sends back a BAD_REQUEST HTTP status
* if email query parameter is empty
*/
if (username.isEmpty() || password.isEmpty())
return Response.status(Status.BAD_REQUEST).build ();
try
{
EntityManager entityManager = EMF.getInstance().createEntityManager ();
Query query = entityManager.createQuery ("SELECT FROM User WHERE user_name= :usernameParam AND password= :passwordParam");
query.setParameter("usernameParam", username);
query.setParameter("passwordParam",password);
User user = (User) query.getSingleResult ();
return Response.status(Status.OK).entity(user).build ();
}
catch (NoResultException e)
{
return Response.status(Status.NOT_FOUND).build ();
}
}//end getUserByUsernamePassword method
/**
* Gets User object with id specified from datastore.
* Returns NOT_FOUND HTTP Response status if no result
* found and OK HTTP Response status if it is found and
* BAD_REQUEST if parameter supplied is empty.
* a list of User objects.
*
* URL: domain-name/services/users/{id}
*
* @author Mario Dennis
* @return Response
*/
@GET
@Produces (MediaType.APPLICATION_JSON)
public Response getUserById (@QueryParam("id")Long id)
{
/*
* Sends back a BAD_REQUEST HTTP status
* if email query parameter is empty.
*/
if (id == null)
return Response.status(Status.BAD_REQUEST).build ();
try
{
EntityManager entityManager = EMF.getInstance ().createEntityManager ();
User user = entityManager.find(User.class,id);
/*
* Checks if user was found. Return a NOT_FOUND
* HTTP status if user was not located.
*/
if (user == null)
return Response.status(Status.NOT_FOUND).build ();
else
return Response.status(Status.OK).entity(user).build();
}
catch (NoResultException e)
{
return Response.status(Status.NOT_FOUND).build ();
}
}//end getUserById method
/**
* Save User object to database. Return NOT_MODIFIED
* HTTP status if persisting of object failed. Otherwise
* return OK HTTP status if it was successful.
*
* URL: domain-name/services/users/{JSON}
*
* @author Mario Dennis
* @param user
* @return Response
*/
@POST
@Consumes (MediaType.APPLICATION_JSON)
public Response saveUser (User user)
{
try
{
EntityManager entityManager = EMF.getInstance().createEntityManager();
entityManager.getTransaction ().begin();
entityManager.persist(user);
entityManager.getTransaction().commit();
return Response.status(Status.OK).build ();
}
catch(Exception e)
{
return Response.status(Status.NOT_MODIFIED).build ();
}
}//end saveUser method
}//end Users class
當我刪除用戶類並上傳回來時,其他兩個服務再次開始工作。 是什么造成的? web.xml中
<!-- Jersey Framework mapping -->
<servlet>
<servlet-name>RESTful</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.ppsjamaica.webservices</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>RESTful</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
<!-- end Jersey Framework mapping -->
請不要設計要求用戶在URI中輸入密碼的服務。
關於它失敗的原因:兩種方法都使用相同的URI模板(請注意,每個方法都注入不同的查詢參數並不意味着它們被映射到不同的URI - 重要的是@Path
注釋的值 - 它是兩者都一樣)。 您必須通過將它們映射到不同的URI模板來消除它們的歧義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.