6

KendoUI グリッドから Web サービスに送信されたフィルター パラメーターを解析しようとしていますが、Jackson にこの JSON を解析させるにはいくつか問題があります。私の知る限り、Kendo が送信するパラメーターの形式を制御することはできますが、パラメーターをより適切な形式にマーシャリングする方法がわからないため、現時点では変更できません。

これらのパラメーターを Oracle データベースの SQL クエリに変換するつもりです。

JSON の例:

{
    "filters":
    [
        {
            "field": "Name",
            "operator": "contains",
            "value": "John"
        },
        {
            "filters": [
                {
                    "field": "Age",
                    "operator": "gt",
                    "value": 20
                },
                {
                    "field": "Age",
                    "operator": "lt",
                    "value": 85
                }
            ],
            "logic", "and"
        },
        {
            "field": "Address",
            "operator": "doesnotcontain",
            "value": "street"
        }
    ],
    "logic": "or"
}

フィルター。ジャワ

public class Filters {
    private List<Filter> filters;
    private String logic;
    // accessors/mutators/toString
}

フィルタ.java

public class Filter {
    private String field;
    private String operator;
    private String value;
    // accessors/mutators/toString
}

単体テスト

public class KendoGridFilterTest {
    private ObjectMapper mapper;

    @Before
    public void before() {
        mapper = new ObjectMapper();
    }

    @Test
    public void jsonParseTest() {
        final String json = "{\"filters\":[{\"field\":\"Name\",\"operator\":\"contains\",\"value\":\"John\"},{filters: [{\"field\":\"Age\",\"operator\": \"eq\",\"value\": 85},{\"field\": \"Age\",\"operator\": \"eq\",\"value\": 85}]\"logic\", \"and\",},{\"field\": \"Address\",\"operator\": \"doesnotcontain\",\"value\": \"street\"}],\"logic\":\"or\"}";
        Filters filters = mapper.readValue(json, Filters.class);
        assertTrue(json.equals(filters.writeValueAsString(filters);
    }
}

エラー

com.fasterxml.jackson.databind.UnrecognizedPropertyException: 認識されないフィールド
    'logic'(com.example.Filter) は無視できるものとして販売されていません (3 つの既知のプロパティ
    "値"、"フィールド"、"演算子")
[ソース: java.io.StringReader@3bb2b8; 行:1、列76](参照を通じて
    チェーン: com.example.Filters["filters"]->com.example.Filter["logic"]

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")Filters クラスにも追加しようとしましたが、同じエラーが発生します。

4

1 に答える 1