2017-03-01 14 views
1

私はREST APIを実装していて、POSTメソッドを通過したJSON形式のリクエストにキーが存在するかどうかをチェックしたいと考えています。JSONキーがRESTメソッドに存在するか確認する

私はjsonobject.haskeyタイプのメソッドのラインに沿って何かを探しています。これまでのところ私はジャクソンとjsonの単純なライブラリに出くわしましたが、それらの情報の多くは時代遅れのように見え、私はナビゲートするのに苦労しています。

私の目標は、リソースのインスタンスを作成するためにJSON形式のPOSTリクエストを受け取ることです。 JSONオブジェクト内のキーの存在に応じて、値はセッターを介して割り当てられます。

ライブラリとAPIといくつかの例を私に指示することができれば、非常に役に立ちます。 JSON.hasOptionKeyが失敗したため

{ 
    "id": 1, 
    "name": "A green door", 
    "price": 12.50, 
    "tags": ["home", "green"] 
} 

{ 
    "id": 1, 
    "name": "A green door", 
    "price": 12.50, 
    "option":, 
    "tags": ["home", "green"] 
} 

として処理されます。

+0

あなたは、最小完全、かつ検証例はhttpを投稿する必要があります。 //stackoverflow.com/help/mcve – freedev

答えて

1

これを行う標準的な方法は、JSONリクエストペイロードとドメインオブジェクトの間に何らかの契約を結ぶことです。JSON解析ライブラリを使用してjsonを手動で解析できますが、エラーが発生しやすいことは明らかです。

GSONのようなものを使用して、たとえば、Javaオブジェクトとその逆を使用してJSON構造を表すことができますが:

することができます、その後も:

class X { 
    String id; 
    List<String> values; 
} 

のようなものにシリアライズされますたとえば、idがjavaオブジェクトにない場合、JSONは

になります。たとえば、nullを処理する方法をパーサーが認識できるように、(de)シリアライズのオプションを設定します。ここでは
{"values": ["1", "2", "3"]} 

UPDATE

はGSON(輸入品と簡潔にするため削除ゲッター/セッター)での使用の例である:

public class Question42529415 { 

    private static final Gson GSON = new GsonBuilder() 
      .setPrettyPrinting() 
      //.serializeNulls() 
      .create(); 

    private static Item fromPost(String postRequestJson) { 
     return GSON.fromJson(postRequestJson, Item.class); 
    } 

    private static String toClient(Item item) { 
     return GSON.toJson(item); 
    } 

    public static void main(String[] args) { 
     String clientReq = "{\n" 
       + " \"id\": 1,\n" 
       + " \"name\": \"A green door\",\n" 
       + " \"price\": 12.50,\n" 
       + " \"tags\": [\"home\", \"green\"]\n" 
       + "}"; 

     Item item = fromPost(clientReq); 
     System.out.println(item.getName() + " " + item.getOption()); 

     item.setOption("modified option"); 
     String modified = toClient(item); 
     System.out.println(modified); 
    } 
} 

class Item { 
    private String id; 
    private String name; 
    private String option; 
    private double price; 
    private List<String> tags; 

    // getters and setters 
} 
+0

下に記載されていることを教えていただけますか? 1)gsonを引数として取り込むPostメソッドを設定する、2)シリアライザクラスを実装してPOSTメソッド内でコールする、3)シリアライザクラス内でコールする、ヌルを処理するためにデシリアライズオプションを設定する、4)JSONオブジェクトを返す私のモデルに正しい値を設定するために私のサービスに渡される文字列に変換されます – viviboox3

+0

@ viviboox3、右の音:)例の私の更新を参照してください – epoch

+0

ありがとう! – viviboox3

関連する問題