杰克逊表单提交复选框

时间:2011-03-09 17:08:02

标签: json jackson

我在表单提交上有一个带有复选框的表单。 如果检查了一个,它将以字符串形式出现,如果多次检查,则以json数组形式出现。

如何将对象作为数组?

TypeReference<HashMap> typeRef = new TypeReference<HashMap>(){};

    JsonFactory factory = new JsonFactory();
    ObjectMapper mapper = new ObjectMapper(factory);

    HashMap<String, Object> bean = mapper.readValue(formBean, typeRef);

bean.get("somevarible")&lt;无论检查了多少个盒子,我想把它作为数组

由于

修改

我正在使用此功能,如何更新?

    $.fn.serializeObject = function() {
    var o = {};
    var a = this.serializeArray();

    $.each(a, function() {
    if (o[this.name]) {
        if (!o[this.name].push) {
            o[this.name] = [o[this.name]];
        }
        o[this.name].push(this.value || '');
    } else {
        o[this.name] = this.value || '';
    }
    });
    return o;
    };

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题反序列化json(又名“复选框问题”)。我(丑陋)的解决方法是使用@JsonAnySetter手动对传入的(字符串/列表)值执行“正确”操作。

// q is always just a string.
@JsonProperty("q")
private String query;
// fq could be a string or a list.
private List<String> filterQuery;
// (get/set/add omitted)

// XXX - this is an evil hack to support 1 or >1 fq values 
// there must be a better way to support 2-way deserialization
@JsonAnySetter
void addEntry(String key, Object value)
{
    if ("fq".equals(key))
    {
        if (value == null)
        {
            // can this even happen?
        } else if (String.class.equals(value.getClass()))
        {
            addFilterQuery((String) value);
        } else 
        {
            setFilterQuery((List<String>) value);
        }
    }
}