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 クラスにも追加しようとしましたが、同じエラーが発生します。