2014-09-09 2 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을 준다. 하지만 어떤 이유로 전화가 걸리지 않습니다. 서버가 "Received request successfully"를 출력하지 않습니다. 나는 또한 원격 디버깅을 시도하고 결코 그 방법을 안타. 또한 클라이언트 또는 서버 측에서 예외가 발생하지 않습니다. 내가 뭘 잘못하고 있는지 확실하지 않습니다.

+0

어떻게 POST를 제출 하시겠습니까? 어떤 응답 코드를 받습니까? –

+0

먼저 "createNewFBUser"의 서명을 변경하여 매개 변수를 사용하지 않고 (사용자 이름의 println을 제거) 시도해 주시겠습니까? 그것이 디버거에서 그 메소드로 들어가는 지보십시오. –

+0

@DanielScott 클라이언트를 통해 POST를 제출하고 있습니다. 응답 코드는 406입니다. 언급 한 후에 확인했습니다. – rishi

답변

0

HTTP 응답 코드 406은 요청에 올바른 수락 헤더를 보내지 않는다는 것을 의미합니다.

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

는 클라이언트가 요청을 할 때 헤더를 추가 할 수있는 방법이 있어야합니다. 다음 헤더를 추가해야합니다.

Accept:text/html 

이는 서버가 보내는 응답의 유형입니다.

+0

예. 오류 코드 및 일부 온라인 링크를 살펴본 후에 실제로 나를 위해 일한 것은 클라이언트 (mediaType.APPLICATION_FORM_URLENCODED) 부분을 accept로 대체하고 게시물을 보내는 것입니다. 그러나 그것이 그것이 올바른 방법인지 확실하지 않습니다. 그것을 지정하는 것이 얼마나 중요합니까? – rishi

+0

서버와 클라이언트 모두를 제어하는 ​​경우 실제로는 귀하에게 달려 있습니다. 서버가 여러 가지 다른 유형을 되돌려 보낼 수있는 경우 클라이언트가 읽을 수있는 유형을 사용할 수 있도록하는 기능입니다. –