@Override public String getRequestBody(ApiMessage apiMessage) { ApiMessage body = apiMessage.getApiMessageRequestBody(); if (body == null) { return null; } GsonBuilder requestMarshaller = new GsonBuilder(); if (apiMessage.getFieldMask() != null) { requestMarshaller .registerTypeAdapter( body.getClass(), new FieldMaskedSerializer(apiMessage.getFieldMask())) .serializeNulls(); } return requestMarshaller.create().toJson(body); }
@Override public JsonElement serialize( ApiMessage requestBody, Type typeOfSrc, JsonSerializationContext context) { Gson gson = new GsonBuilder().serializeNulls().create(); if (fieldMask == null) { return gson.toJsonTree(requestBody, typeOfSrc); } JsonObject jsonObject = new JsonObject(); for (String fieldName : fieldMask) { Object fieldValue = requestBody.getFieldValue(fieldName); if (fieldValue != null) { jsonObject.add(fieldName, gson.toJsonTree(fieldValue, fieldValue.getClass())); } else { // TODO(andrealin): This doesn't distinguish between the non-existence of a field // and a field value being null. jsonObject.add(fieldName, JsonNull.INSTANCE); } } return jsonObject; } }
@Override public String getRequestBody(ApiMessage apiMessage) { ApiMessage body = apiMessage.getApiMessageRequestBody(); if (body == null) { return null; } GsonBuilder requestMarshaller = new GsonBuilder(); if (apiMessage.getFieldMask() != null) { requestMarshaller .registerTypeAdapter( body.getClass(), new FieldMaskedSerializer(apiMessage.getFieldMask())) .serializeNulls(); } return requestMarshaller.create().toJson(body); }
@Override public JsonElement serialize( ApiMessage requestBody, Type typeOfSrc, JsonSerializationContext context) { Gson gson = new GsonBuilder().serializeNulls().create(); if (fieldMask == null) { return gson.toJsonTree(requestBody, typeOfSrc); } JsonObject jsonObject = new JsonObject(); for (String fieldName : fieldMask) { Object fieldValue = requestBody.getFieldValue(fieldName); if (fieldValue != null) { jsonObject.add(fieldName, gson.toJsonTree(fieldValue, fieldValue.getClass())); } else { // TODO(andrealin): This doesn't distinguish between the non-existence of a field // and a field value being null. jsonObject.add(fieldName, JsonNull.INSTANCE); } } return jsonObject; } }
@Override public Map<String, List<String>> getQueryParamNames(RequestT apiMessage) { Set<String> paramNames = getQueryParamNames(); Map<String, List<String>> queryParams = new HashMap<>(); Map<String, List<String>> nullableParams = new HashMap<>(); for (String paramName : paramNames) { Object paramValue = apiMessage.getFieldValue(paramName); List<String> valueList; if (paramValue == null) { continue; } if (paramValue instanceof List) { valueList = new ArrayList<>(); for (Object val : (List<Object>) paramValue) { valueList.add(val.toString()); } } else { valueList = Lists.newArrayList(paramValue.toString()); } nullableParams.put(paramName, valueList); } Iterator<Map.Entry<String, List<String>>> iterator = nullableParams.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, List<String>> pair = iterator.next(); if (pair.getValue() != null && pair.getValue().size() > 0 && pair.getValue().get(0) != null) { queryParams.put(pair.getKey(), pair.getValue()); } } return queryParams; }
@Override public Map<String, List<String>> getQueryParamNames(RequestT apiMessage) { Set<String> paramNames = getQueryParamNames(); Map<String, List<String>> queryParams = new HashMap<>(); Map<String, List<String>> nullableParams = new HashMap<>(); for (String paramName : paramNames) { Object paramValue = apiMessage.getFieldValue(paramName); List<String> valueList; if (paramValue == null) { continue; } if (paramValue instanceof List) { valueList = new ArrayList<>(); for (Object val : (List<Object>) paramValue) { valueList.add(val.toString()); } } else { valueList = Lists.newArrayList(paramValue.toString()); } nullableParams.put(paramName, valueList); } Iterator<Map.Entry<String, List<String>>> iterator = nullableParams.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, List<String>> pair = iterator.next(); if (pair.getValue() != null && pair.getValue().size() > 0 && pair.getValue().get(0) != null) { queryParams.put(pair.getKey(), pair.getValue()); } } return queryParams; }
private Map<String, String> getPathParams(RequestT apiMessage) { Object fieldValue = apiMessage.getFieldValue(getResourceNameField()); if (fieldValue == null) { throw new IllegalArgumentException( String.format( "Resource name field %s is null in message object.", getResourceNameField())); } String resourceNamePath = fieldValue.toString(); return getResourceNameFactory().parse(resourceNamePath).getFieldValuesMap(); }
private Map<String, String> getPathParams(RequestT apiMessage) { Object fieldValue = apiMessage.getFieldValue(getResourceNameField()); if (fieldValue == null) { throw new IllegalArgumentException( String.format( "Resource name field %s is null in message object.", getResourceNameField())); } String resourceNamePath = fieldValue.toString(); return getResourceNameFactory().parse(resourceNamePath).getFieldValuesMap(); }