从JSON反序列化时,我可以限制可能的值吗?

时间:2015-12-11 18:04:47

标签: java json fasterxml

我正在使用fastxml库,我有以下内容:

public class Test {
    public String value;
}

...

import java.io.IOException;

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {

    public static final ObjectMapper mapper = new ObjectMapper();

    public static void main(String[] args) throws IOException {
        String json = "{\"value\":\"foo\"}";
        Test t = mapper.readValue(json, Test.class);
    }
}

是否可以限制value可能的值?

例如,如果JSON为“{”value“:”bar“}”,我希望Test t = mapper.readValue(json, Test.class);抛出异常(或以某种方式指示错误)。

1 个答案:

答案 0 :(得分:2)

直接通过FasterXML(杰克逊2),没有。它将进行的唯一验证是可能从JSON类型转换为相应的Java类型。

您可以在用于相应字段的setter中自行进行验证,从而引发运行时异常。例如

JsonDeserializer

您还可以编写一个自定义@Override protected void onCreate(Bundle savedInstanceState) { ... SharedPreferences Saved_Settings = getPreferences("Saved_Settings", MODE_PRIVATE); boolean PU2 = Saved_Settings.getBoolean("PU", false); // no need to check with if conditions. just set the button with the value(PU2) chk_box_PU.setChecked(PU2); } public void save_settings(View v) { CheckBox chk_box_PU = (CheckBox) findViewById(R.id.chk_box_PU); SharedPreferences Saved_Settings = this.getSharedPreferences("Saved_Settings", MODE_PRIVATE); SharedPreferences.Editor prefsEditor = Saved_Settings.edit(); prefsEditor.putBoolean("PU", chk_box_PU.isChecked()); prefsEditor.commit(); } 来执行验证,并在不适当的值上失败。有一个编写反序列化器here和其他教程的例子。