オブジェクトがJSON解析時の属性に対応しない+空文字列+列挙の問題を解決する

1653 ワード

JSON列をオブジェクトとして解析する場合、属性が対応していない場合、または列挙が空の文字列の場合、解析エラーが発生します.この場合、いくつかの構成で解決し、直接コードをアップロードできます.
package com.dms.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUtils {

	public static String encode(Object obj) {
		ObjectMapper om = new ObjectMapper();
		ByteArrayOutputStream baos = null;
		try {
			baos = new ByteArrayOutputStream();
			JsonGenerator generator = om.getFactory().createGenerator(baos,
					JsonEncoding.UTF8);
			generator.writeObject(obj);
			String result = new String(baos.toByteArray(), "utf-8");
			return result;
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			try {
				if (baos != null) {
					baos.close();
				}
			} catch (IOException e) {
			}
		}
	}

	public static  T decode(String content, Class valueType) {
		ObjectMapper om = new ObjectMapper();
		om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		om.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT,
				true);
		om.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL,
				true);
		try {
			return om.readValue(content, valueType);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

}

対象配列を含むJSONをListに解析したところ、良い方法が見つからず、先に配列に解析してからListに変換することができます
Image[] imageList1 = JsonUtils.decode((String) router.requestGet(),Image[].class);