2016-04-27 91 views
0

需要您的帮助!当我在特定的URL生成JSON格式。我从我的应用程序中获取了JSON格式的所有数据。而不是例如只生产后的信息我得到了getMessageByID和getAllMessage都在同一个时间...以json格式生成所有数据

“的网址:http://localhost:8080/Messenger/rest/messenger/messeger/i%20love%20running/Maks/Burkov/32059087

为什么它生产的所有信息? 这里是我得到的:

我只需要做什么来产生@Post信息?

{ 
"name": "Maks", 
"lastname": "Burkov", 
"meessegaDate": 1461776715593, 
"id_messenger": 32059087, 

I need only the 4 lines above! 

"message": "i love running", 
"allmessages": [ 
"i love running" 
] 
} 

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


@POST 
@Path("/{message}/{messager_name}/{messager_last_name}/{messager_id}") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public MessengerDatabase ddMessage(@PathParam("message") String message, @PathParam("messager_name")String messager_name, @PathParam("messager_last_name")String messager_last_name ,@PathParam("messager_id") long messager_id){ 

MessengerDatabase mes = new MessageService().addMessage(message, messager_name, messager_last_name, messager_id); 

return mes; 

} 

@GET 
@Path("/{messager_id}") 
@Produces(MediaType.APPLICATION_JSON) 
public String GetMessageById(@PathParam("messager_id") long id){ 

    String message = new MessageService().getMessageById(id); 

    System.out.println(message); 

    return message; 
} 

@GET 
@Path("/allmess") 
@Produces(MediaType.APPLICATION_JSON) 
public List<String> getAllMessages(){ 
    return new MessageService().getAllMessages(); 
} 

}

信使DATABSE:

public class MessengerDatabase { 

public MessengerDatabase() {} 


public MessengerDatabase(String message, long id){ 

    setMessageByid(message, id); 

} 

public MessengerDatabase(String message, String messager_name, String messager_lastname,long messager_id) { 

    Date date_generator = new Date(); 

    setMeessegaDate(date_generator); 
    setId_messenger(messager_id); 
    setMessage(message); 
    setMessageByid(message,messager_id); 
    setLastname(messager_lastname); 
    setName(messager_name); 
    System.out.println("In Constuctor"); 
} 

public String getName() { 
    return name; 
} 
private void setName(String name) { 
    this.name = name; 
} 
public String getLastname() { 
    return lastname; 
} 
private void setLastname(String lastname) { 
    this.lastname = lastname; 
} 
public Date getMeessegaDate() { 
    return meessegaDate; 
} 
private void setMeessegaDate(Date meessegaDate) { 
    this.meessegaDate = meessegaDate; 
} 
public long getId_messenger() { 
    return id_messenger; 
} 
private void setId_messenger(long id_messenger) { 
    this.id_messenger = id_messenger; 
} 

public String getMessage() { 
    return message; 
} 

private void setMessage(String message) { 

    this.message = message; 
} 

private void setMessageByid(String message, long id){ 

    allmessages.add(message); 
    message_by_messenger_id.put(id,message); 
} 

@Override 
public String toString() { 
    return "MessengerDatabase [name=" + name + ", lastname=" + lastname 
      + ", meessegaDate=" + meessegaDate + ", id_messenger=" + id_messenger + ", message=" + message + "]"; 
} 

public List<String> getAllmessages() { 
    return allmessages; 
} 

public String getMessage_by_messeger_id(long id) { 

    String messageById = message_by_messenger_id.get(id); 

    return messageById; 
} 


private static Map<Long,String> message_by_messenger_id = new HashMap<>(); 
private static List<String> allmessages = new ArrayList<>(); 

private String name; 
private String lastname; 
private Date meessegaDate; 
private long id_messenger; 
private String message; 

web xml: 

<display-name>Messenger</display-name> 

<servlet> 
<servlet-name>MessengerTest</servlet-name> 
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
<init-param> 
<param-name>jersey.config.server.provider.packages</param-name> 
<param-value>messenger.resources</param-value> 
</init-param> 

</servlet> 

<servlet-mapping> 
<servlet-name>MessengerTest</servlet-name> 
<url-pattern>/rest/messenger/*</url-pattern> 
</servlet-mapping> 
+0

MessengerDatabase是如何定义的?你能指定你使用的URL吗? –

+0

感谢您的评论..我添加MessengerDatabase –

回答

0

为什么您的文章有这条道路?

@Path("/{message}/{messager_name}/{messager_last_name}/{messager_id}")

我这样做:

@Path("/message") 
    @Consumes(MediaType.APPLICATION_JSON) 
public MessengerDatabase ddMessage(Message message){ 

MessengerDatabase mes = new MessageService().addMessage(message); 

return mes; 

我想你的路径是相互矛盾的相互...路径张贴变量PARAMS是不是最好的设计...

这里的一个链接,将帮助您重新设计您的API,如果您愿意: http://blog.octo.com/wp-content/uploads/2014/12/OCTO-Refcard_API_Design_EN_3.0.pdf

+0

好的,谢谢!路径参数是用于传输数据的路径.. 我不认为有冲突的问题..因为我从资源类获取所有信息,问题是在URL指定..我的应用程序是从所有方法生成的JSON格式在资源类...即使我设置具体方法的路径! –

+0

我会试试你的方式,谢谢 –

0

您的POST方法正在返回MessengerDatabase。

@POST 
@Path("/{message}/{messager_name}/{messager_last_name}/{messager_id}") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public MessengerDatabase ddMessage(@PathParam("message") String message, @PathParam("messager_name")String messager_name, @PathParam("messager_last_name")String messager_last_name ,@PathParam("messager_id") long messager_id){  
    MessengerDatabase mes = new MessageService().addMessage(message, messager_name, messager_last_name, messager_id);  
    return mes;  
} 

该类将使用配置的JSON写入器转换为JSON。该JSON编写器通常会将MessengerDatabase对象中的所有可读JavaBeans属性并将其序列化为JSON。 MessengerDatabase类具有在每个JavaBeans约定中定义的输出中接收的所有属性 - no-arg getters()。我在下面添加了相应的获得者。

{ 
"name": "Maks", ==> getName() 
"lastname": "Burkov", ==> getLastname() 
"meessegaDate": 1461776715593, ==> getMeessegaDate() 
"id_messenger": 32059087, ==> getId_messenger() 

I need only the 4 lines above! 

"message": "i love running", ==> getMessage() 
"allmessages": [ ==> getAllmessages() 
"i love running" 
] 
} 

getMessage()和getAllmessages()将它们添加到输出中。如果你不想在输出中使用这些属性,你可以定义一个没有这些属性的DTO(另一个类似POJO的MessengerDatabase),将你的MessengerDatabase实例映射到它并返回该DTO。

您可能想重温你正在使用静态变量的方式。