以json格式生成所有数据
需要您的帮助!当我在特定的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>
为什么您的文章有这条道路?
@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
好的,谢谢!路径参数是用于传输数据的路径.. 我不认为有冲突的问题..因为我从资源类获取所有信息,问题是在URL指定..我的应用程序是从所有方法生成的JSON格式在资源类...即使我设置具体方法的路径! –
我会试试你的方式,谢谢 –
您的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。
注
您可能想重温你正在使用静态变量的方式。
MessengerDatabase是如何定义的?你能指定你使用的URL吗? –
感谢您的评论..我添加MessengerDatabase –