package com.baidu.dsp.common.vo; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.NoSuchMessageException; import org.springframework.stereotype.Component; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.json.MappingJackson2JsonView; import com.baidu.dsp.common.constant.ErrorCode; import com.baidu.dsp.common.constant.FrontEndInterfaceConstant; import com.baidu.dsp.common.context.ContextReader; /** * 通用的JSON返回器 * * @author liaoqiqi * @version 2013-12-3 */ @Component public class JsonObjectUtils { protected static final Logger LOG = LoggerFactory.getLogger(JsonObjectUtils.class); private static ContextReader contextReader; @Autowired(required = true) public JsonObjectUtils(@Qualifier("contextReaderImpl") ContextReader contextReader) { JsonObjectUtils.contextReader = contextReader; } /** * 返回正确(多层结构), 非列表请求 * * @param key * @param value * * @return */ public static <T> JsonObjectBase buildObjectSuccess(String key, T value) { JsonObject json = new JsonObject(); json.addData(key, value); LOG.info(json.toString()); return json; } /** * 返回正确(顶层结构), 非列表请求 * * @param value * * @return */ public static <T> JsonObjectBase buildSimpleObjectSuccess(T value) { JsonSimpleObject json = new JsonSimpleObject(); json.setResult(value); LOG.info(json.toString()); return json; } /** * 返回正确, 列表请求 * * @param value * * @return */ public static <T> JsonObjectBase buildListSuccess(List<?> value, int totalCount, T footResult) { JsonObjectList json = new JsonObjectList(); json.setPage(totalCount); json.addData(value); json.addFootData(footResult); LOG.info(json.toString()); return json; } /** * 参数错误: Field * * @param errors * * @return */ public static JsonObjectBase buildFieldError(Map<String, String> errors, ErrorCode statusCode) { JsonObjectError json = new JsonObjectError(); json.setStatus(statusCode.getCode()); for (String str : errors.keySet()) { json.addFieldError(str, contextReader.getMessage(errors.get(str))); } LOG.info(json.toString()); return json; } /** * 参数错误: Field * * @param errors * * @return */ public static JsonObjectBase buildFieldError(Map<String, String> errors, Map<String, Object[]> argsMap, ErrorCode statusCode) { JsonObjectError json = new JsonObjectError(); json.setStatus(statusCode.getCode()); for (String str : errors.keySet()) { try { json.addFieldError(str, contextReader.getMessage(errors.get(str), argsMap.get(str))); } catch (NoSuchMessageException e) { json.addFieldError(str, errors.get(str)); } } LOG.info(json.toString()); return json; } /** * 参数错误: global */ public static JsonObjectBase buildGlobalError(String error, ErrorCode errorCode) { JsonObjectError json = new JsonObjectError(); json.setStatus(errorCode.getCode()); json.addGlobalError(contextReader.getMessage(error)); LOG.info(json.toString()); return json; } /** */ public static ModelAndView JsonObjectError2ModelView(JsonObjectError json) { ModelAndView model = new ModelAndView(new MappingJackson2JsonView()); model.addObject(FrontEndInterfaceConstant.RETURN_SUCCESS, json.getSuccess()); model.addObject(FrontEndInterfaceConstant.RETURN_MESSAGE, json.getMessage()); model.addObject(FrontEndInterfaceConstant.STATUS_CODE_STRING, json.getStatus()); model.addObject(FrontEndInterfaceConstant.SESSION_ID, json.getSessionId()); return model; } /** * @param error * * @return */ public static String getMessage(String error) { return contextReader.getMessage(error); } }