2016-02-29 3 views
0

Я пытаюсь преобразовать JSON в объект Java с помощью платформы Play. У меня нет простого управления входным JSON, который содержит тире в именах.Преобразование из JSON с помощью Jackson Annotations

{ "field-name": "value" } 

В результате я не могу создать объект Java со стандартным отображением JSON. У меня есть класс, который выглядит следующим образом:

import com.fasterxml.jackson.annotation.JsonProperty; 

public class Data { 
    @JsonProperty("field-name") 
    public String fieldName; 
} 

Я знаю, что Play 2.4 uses Jackson и У меня есть модульный тест, который способен заполнить объект из JSON, используя по умолчанию Джексон ObjectMapper.

JSON является органом запроса POST, и я пытаюсь использовать его как это:

Form<Data> form = Form.form(Data.class).bindFromRequest(); 

Если я печатаю form, я могу, что поле данных заполняется с ожидаемыми значениями. Однако, когда я делаю form.get(), возвращаемое значение имеет нулевое поле. (В фактическом коде больше полей, которые являются строками или длинными. Все они равны нулю или 0.)

Я пытаюсь настроить десериализацию JSON не так? Или я делаю что-то еще неправильно?

ответ

1

Как вы и ожидали, вы использовали неправильный способ десериализации. Класс Forms предназначен только для PlayForms, а не для запроса Json. Взгляните на документацию BodyParser и JsonActions:

@BodyParser.Of(BodyParser.Json.class) 
public Result index() { 
    RequestBody body = request().body(); 
    Data data = Json.fromJson(body.asJson(), Data.class); 
    return ok("Got java object: " + data.toString()); 
}