2016-04-27 6 views
0

あなたの助けが必要です!私は特定のURLでJSON形式を生成します。私は、私のアプリケーションからJSON形式ですべてのデータを取得しました。たとえば、代わりに私は1時間にgetMessageByIDとgetAllMessageすべてを得た唯一のポストの情報を生成する...json形式ですべてのデータを生成

「URL: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

ありがとうございました! Path Paramsはパス内のデータを転送するためのものです.. 競合に問題はないとは思いません。私はResourceクラスからすべての情報を取得するので、問題はURLを指定しています..私のアプリケーションはすべてのメソッド私は具体的な方法にパスを設定しても、リソースクラス.. –

+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の規則に従って定義された出力で受け取るすべてのプロパティがあります。引数なしの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を返すことができます。

あなたは静的変数を使用している方法を再検討することをお勧めします。

関連する問題