【问题标题】:Producing in json format all data以json格式生成所有数据
【发布时间】:2016-04-27 17:12:16
【问题描述】:

需要你的帮助!当我在特定 URL 生成 JSON 格式时。我从我的应用程序中获得了 JSON 格式的所有数据。例如,我不是只生成帖子信息,而是一次获得了 getMessageByID 和 getAllMessage ...

“网址: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();
}

}

信使数据库:

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>

【问题讨论】:

  • MessengerDatabase 是如何定义的?您能指定您使用的网址吗?
  • 感谢您的评论.. 我添加了 MessengerDatabase

标签: java json jersey


【解决方案1】:

为什么你的帖子有那个路径?

@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;

我认为您的路径相互冲突...在路径参数中发布变量不是最好的设计...

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

【讨论】:

  • 好的,谢谢!路径参数用于在路径中传输数据..我认为冲突没有问题..因为我从 Resource 类中获取所有信息,所以问题在于 URL 指定..我的应用程序从所有方法中生成 json 格式资源类..即使我将路径设置为具体方法!
【解决方案2】:

您的 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 约定定义的输出中收到的所有属性 - 无参数 getters()。我在下面添加了相应的getter。

{
"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(另一个 MessengerDatabase,如 POJO),将您的 MessengerDatabase 实例映射到它并返回该 DTO。

注意

您可能需要重新审视使​​用静态变量的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 2018-04-11
    • 2014-02-15
    • 2018-04-09
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多