2017-03-20 20 views
0

Jax-RS를 처음 사용합니다. 저지를 사용하여 간단한 GET 메서드를 구현하려고합니다. 나는 컬렉션 리소스에 대한 정확한 출력을 얻고 있습니다. "ERROR 400 Bad Request" 인스턴스 리소스가 있습니다. 이 시점에서 에 머물러 있습니다. 모든 것이 정확 해 보이지만, 나는 알아낼 수없는 것을 놓치고있는 입니다. 나는 지난 10 일 동안 그것을 시도했습니다. 어떤 도움을받을 수 있습니다. 아래 코드 내 코드를 찾으십시오. "예기치 않은 'T'"응답과 ARC가 던지고있는 POSTMAN 나머지 클라이언트를 사용 중입니다. "요청 엔터티 은 비워 둘 수 없습니다." 둘 다 오류 400 잘못된 요청입니다.요청 엔터티를 비워 둘 수 없습니다.

package com.manish.jax_rs.Messanger.Dao; 

import java.util.HashMap; 
import java.util.Map; 

import com.manish.jax_rs.Messanger.model.Message; 


public class DaoClass { 


    private static Map<Integer,Message> messages = new HashMap<Integer,Message>(); 


    public static Map<Integer, Message> getMessages() { 
     return messages; 
    } 
} 

이이 중에서 MessageService입니다 :

package com.manish.jax_rs.Messanger.resources; 

import java.util.List; 

import javax.websocket.server.PathParam; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import com.manish.jax_rs.Messanger.model.Message; 
import com.manish.jax_rs.Messanger.service.MessageService; 

@Path("/messages") 
public class MessageResource { 

    MessageService messageService = new MessageService(); 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<Message> getMessages(){ 

     return messageService.getAllMessages(); 
    } 

    @GET 
    @Path("/{id}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Message getMessage(@PathParam("id") int id){ 


     return messageService.getMessage(id); 
    } 

} 

이 DaoClass.java입니다 : 이것은 내 MessageResource.java입니다

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    id="WebApp_ID" version="3.1"> 
    <display-name>MessangerWithoutMaven</display-name> 
    <welcome-file-list> 

     <welcome-file>index.jsp</welcome-file> 

    </welcome-file-list> 

    <servlet> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.manish.jax_rs.Messanger</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <url-pattern>/webapi/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

:

내 web.xml 파일입니다 .java :

package com.manish.jax_rs.Messanger.service; 

    import java.util.ArrayList; 
    import java.util.List; 
    import java.util.Map; 

    import com.manish.jax_rs.Messanger.Dao.DaoClass; 
    import com.manish.jax_rs.Messanger.model.Message; 

    public class MessageService { 

     private Map<Integer,Message> messages= DaoClass.getMessages(); 

     Message m1= new Message(1,"Hello John","John"); 
     Message m2= new Message(2,"Hello Mathews","Mathews"); 
     Message m3= new Message(3,"Hello Albert","Albert"); 

     public MessageService(){ 
      messages.put(1,m1); 
      messages.put(2,m2); 
      messages.put(3, m3); 
     } 
     public List<Message> getAllMessages(){ 
      return new ArrayList<Message>(messages.values()); 
     } 
     public Message getMessage(int id){ 
      return messages.get(id); 
     } 
    } 

이 16,은 Message.java입니다 :

package com.manish.jax_rs.Messanger.model; 

import java.util.Date; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class Message { 

    private int id; 
    private String message; 
    //private Date created; 
    private String author; 

    public Message() { 

    } 
    public Message(int id, String message, String author) { 

     this.id = id; 
     this.message = message; 
     this.author = author; 
     //this.created = new Date(); 
    } 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getMessage() { 
     return message; 
    } 
    public void setMessage(String message) { 
     this.message = message; 
    } 

    public String getAuthor() { 
     return author; 
    } 
    public void setAuthor(String author) { 
     this.author = author; 
    } 
} 



[List of jars][1] 




[correct output for collection resource "messages" in Postman rest client][2] 


[Incorrect output for instance resource /messages/1][3]enter code here 


    [1]: https://i.stack.imgur.com/sWfMl.jpg 
    [2]: https://i.stack.imgur.com/y5Nnf.jpg 
    [3]: https://i.stack.imgur.com/8CwId.jpg 

답변

0

PathParam의 가져 오기를 확인하시기 바랍니다. "javax.websocket.server.PathParam;"대신 " "import javax.ws.rs.PathParam;"을 사용하십시오. 정상적으로 작동합니다.

+0

왜이 변경으로 문제가 해결 될 수 있는지 자세히 설명해 주시겠습니까? – Adalee

+0

답을 자세히 기재해야합니다. 답변을 업데이트하십시오. – blackHawk

+0

정말 문제가 무엇인지 찾을 수 없었습니다. STS에 동일한 프로젝트를 가져 와서 매력적으로 작용했습니다. –