2017-03-15 2 views
3

私のプロジェクトのjspページに、CDオブジェクトの作成に必要な情報を送信するフォームを作成しようとしています。私はこれがJSONで動作することを知っています。私はpostmanと呼ばれるGoogleプラグインを使用しています.jsonで投稿要求を行い、新しいcdをすべてのCDのリストに追加します。JAX-RXを使用したREST API jspページのフォームから解析されたJSONの送受信

私はjsonで動作するGUIクライアントを作成する必要がありますが、解析された情報を表示します。私はいくつかのクラスを投稿します。私はサイトを検索したが、本当にここで私を助けることができる何かを見つけることができません。サポートされていないメディアタイプのエラーが発生しています...データを送信する前に何らかの理由でJSONを解析する必要があると思いますか?ここで

@Path("/cd") 
public class CDResources { 

    CDService c = new CDService(); 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public CD addCD(CD cd) 
    { 
     return c.addCD(cd); 
    } 

(あなたはAJAXを使用している場合を除き)フォーム

<form action="webapi/cd/" method="post"> 
     <p> 
      Artist : <input type="text" name="artist" /> 
     </p> 

       <p> 
      Artist : <input type="number" name="numberOfTracks" /> 
     </p> 
       <p> 
      Artist : <input type="text" name="title" /> 
     </p> 

     <input type="submit" value="Submit" /> 
    </form> 

CDクラス

package Assignment.crud.model; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class CD { 

    String title; 
    int numberOfTracks; 
    String artist; 
    long id; 


    public CD() { 

    } 
    public CD(long id,String title,String artist,int numberOfTracks) { 
     super(); 
     this.title = title; 
     this.numberOfTracks = numberOfTracks; 
     this.artist = artist; 
     this.id = id; 
    } 
    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
    public int getNumberOfTracks() { 
     return numberOfTracks; 
    } 
    public void setNumberOfTracks(int numberOfTracks) { 
     this.numberOfTracks = numberOfTracks; 
    } 
    public String getArtist() { 
     return artist; 
    } 
    public void setArtist(String artist) { 
     this.artist = artist; 
    } 
    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 


} 

CDサービスクラス

package Assignment.crud.service; 

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

import Assignment.crud.database.DatabaseClass; 
import Assignment.crud.model.CD; 

public class CDService { 

    private Map<Long, CD> cds = DatabaseClass.getCDs(); 

    public CDService() 
    { 
     cds.put(1L, new CD(1,"Fleet Foxes","Helplessness Blues",10)); 
     cds.put(2L, new CD(2,"Van Morrison","Tupelo Honey",12)); 

    } 
    public List<CD> getAllCDs() 
    { 
     return new ArrayList<CD>(cds.values()); 
    } 

    public CD getCD(long id) 
    { 
     return cds.get(id); 
    } 

    public CD addCD(CD cd) 
    { 
     cd.setId(cds.size()+1); 
     cds.put(cd.getId(), cd); 
     return cd; 
    } 

    public CD updateCD(CD cd) 
    { 
     if(cd.getId()<=0) 
     { 
      return null; 
     } 
     cds.put(cd.getId(), cd); 
     return cd; 
    } 

    public CD removeCD(long id) 
    { 
     return cds.remove(id); 
    } 

} 
+0

エラーが発生した場合や実際に直面している問題が投稿された場​​合に役立ちます。 'public CD addCD(CD cd)'は実際に呼ばれますか? –

答えて

3

HTMLフォームでのデータを送信しますapplication/x-www-form-urlencodedデータ型。ですから、

@POST 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
@Produces(MediaType.APPLICATION_JSON) 
public CD addCD(@FormParam("artist") String artist, 
       @FormParam("title") String title, 
       @FormParam("numberOfTracks") int numberOfTracks) { 

} 

このタイプを受け入れるように、あなたのリソースメソッドを修正する必要がありますまた、Post/Redirect/Getパターンに従うためにリダイレクトを送信したい場合があります。

public Response addCD(...) { 
    return Response.seeOther(...someUrl).build() 
} 

また、基本的なHTMLフォームを使用するのではなく、リクエストを行うためにAJAXライブラリを使用することをおすすめします。これは、REST APIが動作する方法です。

+0

このメソッドから返されたjsonを他のJSPページでどのように使用できますか?応答を返し、何とかjsonページを別のjspページに渡すことで?? –

関連する問題