2014-09-09 7 views
0

Я пытаюсь изучить Джерси. Я столкнулся с проблемами, при которых метод POST работает. Вот то, что мой код выглядит следующим образом:Служба Джерси не принимает POST-звонки

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>Aou</display-name> 
    <display-name>AouTest</display-name> 
    <servlet> 
     <servlet-name>Test Jersy Servlet</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.aou.services</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Test Jersy Servlet</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

Я создал службу пользователя, как показано ниже:

import org.hibernate.Session; 
import org.hibernate.Transaction; 

import com.aou.dao.UserDAO; 
import com.aou.dto.User; 
import com.aou.exceptions.DatabaseException; 
import com.aou.hibernate.DAOFactory; 
import com.aou.utils.AouLogger; 

@Path("/user") 
public class UserService { 

    @Path("register") 
    @POST 
    @Produces(MediaType.TEXT_HTML) 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    public String createNewFBUser(@FormParam("username") String username, 
      @Context HttpServletResponse servletResponse) throws IOException { 

     System.out.println("Received request successfully"); 
     return username; 
    } 


    @Path("test") 
    @GET 
    @Produces(MediaType.TEXT_HTML) 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    public String test() { 

     return "<html> " + "<title>" + "Hello Aou" + "</title>" + "<body><h1>" 
       + "Test Successful" + "</body></h1>" + "</html> "; 

    } 

} 

И я использую клиент, как это:

import javax.ws.rs.core.MediaType; 

import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.ClientResponse; 
import com.sun.jersey.api.client.WebResource; 
import com.sun.jersey.api.client.config.ClientConfig; 
import com.sun.jersey.api.client.config.DefaultClientConfig; 
import com.sun.jersey.api.representation.Form; 

public class CreateUserClient { 

    public void createNewUser() { 
     ClientConfig config = new DefaultClientConfig(); 
     Client client = Client.create(config); 
     WebResource service = client 
       .resource("http://localhost:8080/Aou/rest/user/register"); 

     Form form = new Form(); 
     form.add("username", "username"); 

     ClientResponse response = service.accept(
       MediaType.APPLICATION_FORM_URLENCODED).post(
       ClientResponse.class, form); 
     System.out.println("Form response " + response.getEntity(String.class)); 
    } 

    public static void main(String[] args) { 
     new CreateUserClient().createNewUser(); 
    } 

Когда я использую http://localhost:8080/Aou/rest/user/test , он дает мне хорошо сформированный html. Но почему-то почтовый вызов никогда не достигает метода. Сервер никогда не распечатывает «Полученный запрос успешно». Я также пробовал удаленную отладку и никогда не ударил этот метод. Также не исключено исключение на стороне клиента или сервера. Я не уверен, что я делаю неправильно.

+0

Как вы отправляете свой POST? Какой код ответа вы получаете? –

+0

Не могли бы вы сначала изменить подпись «createNewFBUser», чтобы не принимать параметры (и удалить println имени пользователя)? Посмотрите, попадает ли этот метод в отладчик. –

+0

@ DanielScott Я отправляю POST через клиента. Код ответа 406 теперь, когда я проверил его после того, как вы упомянули – rishi

ответ

0

Код ответа HTTP 406 означает, что вы не отправляете правильный заголовок accept в своем запросе.

What is "406-Not Acceptable Response" in HTTP?

Там должна быть способом для вас, чтобы добавить заголовки, когда клиент делает запрос. Вам необходимо добавить заголовок:

Accept:text/html 

который является типом ответа, отправляемого вашим сервером.

+0

Да. Посмотрев код ошибки и некоторые онлайн-ссылки, то, что на самом деле работало для меня, было заменой части accept (MediaType.APPLICATION_FORM_URLENCODED) от моего клиента и просто отправкой сообщения. Но я не уверен, что это правильный способ сделать это. Насколько важно это указать? – rishi

+0

Если вы управляете сервером и клиентом, то это действительно зависит от вас. Это функция, поэтому, если сервер может отправлять несколько разных типов, он может использовать тип, который клиент может читать. –