List of usage examples for com.fasterxml.jackson.core JsonGenerator writeObjectField
public final void writeObjectField(String fieldName, Object pojo) throws IOException, JsonProcessingException
From source file:com.msopentech.odatajclient.engine.data.impl.JSONEntrySerializer.java
@Override protected void doSerialize(final AbstractJSONEntry entry, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject();//from www. j av a 2 s . c o m if (entry.getMetadata() != null) { jgen.writeStringField(ODataConstants.JSON_METADATA, entry.getMetadata().toASCIIString()); } if (StringUtils.isNotBlank(entry.getType())) { jgen.writeStringField(ODataConstants.JSON_TYPE, entry.getType()); } if (entry.getId() != null) { jgen.writeStringField(ODataConstants.JSON_ID, entry.getId()); } if (entry.getSelfLink() != null) { jgen.writeStringField(ODataConstants.JSON_READ_LINK, entry.getSelfLink().getHref()); } if (entry.getEditLink() != null) { jgen.writeStringField(ODataConstants.JSON_EDIT_LINK, entry.getEditLink().getHref()); } if (entry.getMediaContentSource() != null) { jgen.writeStringField(ODataConstants.JSON_MEDIAREAD_LINK, entry.getMediaContentSource()); } if (entry.getMediaContentType() != null) { jgen.writeStringField(ODataConstants.JSON_MEDIA_CONTENT_TYPE, entry.getMediaContentType()); } final Map<String, List<String>> entitySetLinks = new HashMap<String, List<String>>(); for (JSONLink link : entry.getNavigationLinks()) { if (link.getInlineEntry() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntry()); } else if (link.getInlineFeed() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineFeed()); } else { ODataLinkType type = null; try { type = ODataLinkType.fromString(client, link.getRel(), link.getType()); } catch (IllegalArgumentException e) { // ignore } if (type == ODataLinkType.ENTITY_SET_NAVIGATION) { final List<String> uris; if (entitySetLinks.containsKey(link.getTitle())) { uris = entitySetLinks.get(link.getTitle()); } else { uris = new ArrayList<String>(); entitySetLinks.put(link.getTitle(), uris); } uris.add(link.getHref()); } else { jgen.writeStringField(link.getTitle() + ODataConstants.JSON_BIND_LINK_SUFFIX, link.getHref()); } } } for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) { jgen.writeArrayFieldStart(entitySetLink.getKey() + ODataConstants.JSON_BIND_LINK_SUFFIX); for (String uri : entitySetLink.getValue()) { jgen.writeString(uri); } jgen.writeEndArray(); } for (JSONLink link : entry.getMediaEditLinks()) { if (link.getTitle() == null) { jgen.writeStringField(ODataConstants.JSON_MEDIAEDIT_LINK, link.getHref()); } if (link.getInlineEntry() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntry()); } if (link.getInlineFeed() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineFeed()); } } if (entry.getMediaEntryProperties() == null) { JSONDOMTreeUtils.writeSubtree(client, jgen, entry.getContent()); } else { JSONDOMTreeUtils.writeSubtree(client, jgen, entry.getMediaEntryProperties()); } jgen.writeEndObject(); }
From source file:org.apache.olingo.commons.core.data.JSONEntrySerializer.java
@Override protected void doSerialize(final JSONEntryImpl entry, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject();/*from w w w . j a v a 2s .c om*/ if (entry.getMetadata() != null) { jgen.writeStringField(Constants.JSON_METADATA, entry.getMetadata().toASCIIString()); } if (entry.getId() != null) { jgen.writeStringField(Constants.JSON_ID, entry.getId()); } final Map<String, List<String>> entitySetLinks = new HashMap<String, List<String>>(); for (Link link : entry.getNavigationLinks()) { ODataLinkType type = null; try { type = ODataLinkType.fromString(version, link.getRel(), link.getType()); } catch (IllegalArgumentException e) { // ignore } if (type == ODataLinkType.ENTITY_SET_NAVIGATION) { final List<String> uris; if (entitySetLinks.containsKey(link.getTitle())) { uris = entitySetLinks.get(link.getTitle()); } else { uris = new ArrayList<String>(); entitySetLinks.put(link.getTitle(), uris); } uris.add(link.getHref()); } else { if (StringUtils.isNotBlank(link.getHref())) { jgen.writeStringField(link.getTitle() + Constants.JSON_BIND_LINK_SUFFIX, link.getHref()); } } if (link.getInlineEntry() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntry()); } else if (link.getInlineFeed() != null) { jgen.writeArrayFieldStart(link.getTitle()); for (Entry subEntry : link.getInlineFeed().getEntries()) { jgen.writeObject(subEntry); } jgen.writeEndArray(); } } for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) { jgen.writeArrayFieldStart(entitySetLink.getKey() + Constants.JSON_BIND_LINK_SUFFIX); for (String uri : entitySetLink.getValue()) { jgen.writeString(uri); } jgen.writeEndArray(); } for (Link link : entry.getMediaEditLinks()) { if (link.getTitle() == null) { jgen.writeStringField(Constants.JSON_MEDIAEDIT_LINK, link.getHref()); } if (link.getInlineEntry() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntry()); } if (link.getInlineFeed() != null) { jgen.writeArrayFieldStart(link.getTitle()); for (Entry subEntry : link.getInlineFeed().getEntries()) { jgen.writeObject(subEntry); } jgen.writeEndArray(); } } for (Property property : entry.getProperties()) { property(jgen, property, property.getName()); } jgen.writeEndObject(); }
From source file:com.msopentech.odatajclient.engine.data.json.JSONEntrySerializer.java
@Override protected void doSerializeV3(AbstractJSONEntry<AbstractLinkResource<?, ?>> entry, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject();/* w w w . ja v a2 s.co m*/ if (entry.getMetadata() != null) { jgen.writeStringField(ODataConstants.JSON_METADATA, entry.getMetadata().toASCIIString()); } if (StringUtils.isNotBlank(entry.getType())) { jgen.writeStringField(ODataConstants.JSON_TYPE, entry.getType()); } if (entry.getId() != null) { jgen.writeStringField(ODataConstants.JSON_ID, entry.getId()); } if (entry.getSelfLink() != null) { jgen.writeStringField(ODataConstants.JSON_READ_LINK, entry.getSelfLink().getHref()); } if (entry.getEditLink() != null) { jgen.writeStringField(ODataConstants.JSON_EDIT_LINK, entry.getEditLink().getHref()); } if (entry.getMediaContentSource() != null) { jgen.writeStringField(ODataConstants.JSON_MEDIAREAD_LINK, entry.getMediaContentSource()); } if (entry.getMediaContentType() != null) { jgen.writeStringField(ODataConstants.JSON_MEDIA_CONTENT_TYPE, entry.getMediaContentType()); } final Map<String, List<String>> entitySetLinks = new HashMap<String, List<String>>(); for (AbstractLinkResource link : (List<? extends AbstractLinkResource<?, ?>>) entry.getNavigationLinks()) { if (link.getInlineEntry() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntry()); } else if (link.getInlineFeed() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineFeed()); } else { ODataLinkType type = null; try { type = ODataLinkType.fromString(link.getRel(), link.getType()); } catch (IllegalArgumentException e) { // ignore } if (type == ODataLinkType.ENTITY_SET_NAVIGATION) { final List<String> uris; if (entitySetLinks.containsKey(link.getTitle())) { uris = entitySetLinks.get(link.getTitle()); } else { uris = new ArrayList<String>(); entitySetLinks.put(link.getTitle(), uris); } uris.add(link.getHref()); } else { jgen.writeStringField(link.getTitle() + ODataConstants.JSON_BIND_LINK_SUFFIX, link.getHref()); } } } for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) { jgen.writeArrayFieldStart(entitySetLink.getKey() + ODataConstants.JSON_BIND_LINK_SUFFIX); for (String uri : entitySetLink.getValue()) { jgen.writeString(uri); } jgen.writeEndArray(); } for (AbstractLinkResource link : (List<? extends AbstractLinkResource<?, ?>>) entry.getMediaEditLinks()) { if (link.getTitle() == null) { jgen.writeStringField(ODataConstants.JSON_MEDIAEDIT_LINK, link.getHref()); } if (link.getInlineEntry() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntry()); } if (link.getInlineFeed() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineFeed()); } } if (entry.getMediaEntryProperties() == null) { DOMTreeUtils.writeSubtree(client, jgen, entry.getContent()); } else { DOMTreeUtils.writeSubtree(client, jgen, entry.getMediaEntryProperties()); } jgen.writeEndObject(); }
From source file:com.msopentech.odatajclient.engine.data.json.JSONEntrySerializer.java
@Override protected void doSerializeV4(AbstractJSONEntry<AbstractLinkResource<?, ?>> entry, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { final String annotationPrefix = "@"; jgen.writeStartObject();/*from w w w . j av a2 s .c o m*/ if (entry.getMetadata() != null) { jgen.writeStringField(annotationPrefix + ODataConstants.JSON_METADATA, entry.getMetadata().toASCIIString()); } if (StringUtils.isNotBlank(entry.getType())) { jgen.writeStringField(annotationPrefix + ODataConstants.JSON_TYPE, entry.getType()); } if (entry.getId() != null) { jgen.writeStringField(annotationPrefix + ODataConstants.JSON_ID, entry.getId()); } if (entry.getSelfLink() != null) { jgen.writeStringField(annotationPrefix + ODataConstants.JSON_READ_LINK, entry.getSelfLink().getHref()); } if (entry.getEditLink() != null) { jgen.writeStringField(annotationPrefix + ODataConstants.JSON_EDIT_LINK, entry.getEditLink().getHref()); } if (entry.getMediaContentSource() != null) { jgen.writeStringField(annotationPrefix + ODataConstants.JSON_MEDIAREAD_LINK, entry.getMediaContentSource()); } if (entry.getMediaContentType() != null) { jgen.writeStringField(annotationPrefix + ODataConstants.JSON_MEDIA_CONTENT_TYPE, entry.getMediaContentType()); } final Map<String, List<String>> entitySetLinks = new HashMap<String, List<String>>(); for (AbstractLinkResource link : (List<? extends AbstractLinkResource<?, ?>>) entry.getNavigationLinks()) { if (link.getInlineEntry() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntry()); } else if (link.getInlineFeed() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineFeed()); } else { ODataLinkType type = null; try { type = ODataLinkType.fromString(link.getRel(), link.getType()); } catch (IllegalArgumentException e) { // ignore } if (type == ODataLinkType.ENTITY_SET_NAVIGATION) { final List<String> uris; if (entitySetLinks.containsKey(link.getTitle())) { uris = entitySetLinks.get(link.getTitle()); } else { uris = new ArrayList<String>(); entitySetLinks.put(link.getTitle(), uris); } uris.add(link.getHref()); } else { jgen.writeStringField(link.getTitle() + ODataConstants.JSON_BIND_LINK_SUFFIX, link.getHref()); } } } for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) { jgen.writeArrayFieldStart(entitySetLink.getKey() + ODataConstants.JSON_BIND_LINK_SUFFIX); for (String uri : entitySetLink.getValue()) { jgen.writeString(uri); } jgen.writeEndArray(); } for (AbstractLinkResource link : (List<? extends AbstractLinkResource<?, ?>>) entry.getMediaEditLinks()) { if (link.getTitle() == null) { jgen.writeStringField(annotationPrefix + ODataConstants.JSON_MEDIAEDIT_LINK, link.getHref()); } if (link.getInlineEntry() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntry()); } if (link.getInlineFeed() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineFeed()); } } if (entry.getMediaEntryProperties() == null) { DOMTreeUtils.writeSubtree(client, jgen, entry.getContent()); } else { DOMTreeUtils.writeSubtree(client, jgen, entry.getMediaEntryProperties()); } jgen.writeEndObject(); }
From source file:com.arpnetworking.logback.serialization.BaseSerializationStrategy.java
/** * Complete writing the Steno JSON wrapper. * * @param event Instance of <code>ILoggingEvent</code>. * @param eventName The name of the event. * @param contextKeys The <code>List</code> of context keys. * @param contextValues The <code>List</code> of context values. * @param jsonGenerator <code>JsonGenerator</code> instance. * @param objectMapper <code>ObjectMapper</code> instance. * @throws IOException If writing JSON fails. *///from w ww.jav a 2 s . c o m // CHECKSTYLE.OFF: NPathComplexity - Many combinations protected void endStenoWrapper(final ILoggingEvent event, final String eventName, final List<String> contextKeys, final List<Object> contextValues, final JsonGenerator jsonGenerator, final ObjectMapper objectMapper) throws IOException { jsonGenerator.writeObjectFieldStart("context"); if (_encoder.isInjectContextHost()) { jsonGenerator.writeStringField("host", HOST_CONVERTER.convert(event)); } if (_encoder.isInjectContextProcess()) { jsonGenerator.writeStringField("processId", PROCESS_CONVERTER.convert(event)); } if (_encoder.isInjectContextThread()) { jsonGenerator.writeStringField("threadId", THREAD_CONVERTER.convert(event)); } if (_encoder.isInjectContextLogger()) { if (_encoder.isCompressLoggerName()) { jsonGenerator.writeStringField("logger", CONDENSED_LOGGER_CONVERTER.convert(event)); } else { jsonGenerator.writeStringField("logger", LOGGER_CONVERTER.convert(event)); } } if (_encoder.isInjectContextFile()) { jsonGenerator.writeStringField("file", FILE_CONVERTER.convert(event)); } if (_encoder.isInjectContextClass()) { jsonGenerator.writeStringField("class", CLASS_CONVERTER.convert(event)); } if (_encoder.isInjectContextMethod()) { jsonGenerator.writeStringField("method", METHOD_CONVERTER.convert(event)); } if (_encoder.isInjectContextLine()) { jsonGenerator.writeStringField("line", LINE_CONVERTER.convert(event)); } for (final String key : _encoder.getMdcProperties()) { final String value = event.getMDCPropertyMap().get(key); jsonGenerator.writeStringField(key, value); } writeKeyValuePairs(contextKeys, contextValues, jsonGenerator, objectMapper); jsonGenerator.writeEndObject(); // End 'context' field jsonGenerator.writeObjectField("id", createId()); jsonGenerator.writeObjectField("version", "0"); jsonGenerator.writeEndObject(); // End log message jsonGenerator.writeRaw('\n'); jsonGenerator.flush(); }
From source file:de.escalon.hypermedia.spring.hydra.PagedResourcesSerializer.java
protected void serializeContext(Object bean, JsonGenerator jgen, SerializerProvider serializerProvider, Deque<LdContext> contextStack) throws IOException { // TODO: this code is duplicated from JacksonHydraSerializer, see there for considerations if (proxyUnwrapper != null) { bean = proxyUnwrapper.unwrapProxy(bean); }//from www. ja v a 2 s. c o m MixinSource mixinSource = new JacksonMixinSource(serializerProvider.getConfig()); final Class<?> mixInClass = mixinSource.findMixInClassFor(bean.getClass()); final LdContext parentContext = contextStack.peek(); LdContext currentContext = new LdContext(parentContext, ldContextFactory.getVocab(mixinSource, bean, mixInClass), ldContextFactory.getTerms(mixinSource, bean, mixInClass)); contextStack.push(currentContext); // check if we need to write a context for the current bean at all // If it is in the same vocab: no context // If the terms are already defined in the context: no context boolean mustWriteContext; if (parentContext == null || !parentContext.contains(currentContext)) { mustWriteContext = true; } else { mustWriteContext = false; } if (mustWriteContext) { // begin context // default context: schema.org vocab or vocab package annotation jgen.writeObjectFieldStart("@context"); // do not repeat vocab if already defined in current context if (parentContext == null || parentContext.vocab == null || (currentContext.vocab != null && !currentContext.vocab.equals(parentContext.vocab))) { jgen.writeStringField(JsonLdKeywords.AT_VOCAB, currentContext.vocab); } for (Map.Entry<String, Object> termEntry : currentContext.terms.entrySet()) { if (termEntry.getValue() instanceof String) { jgen.writeStringField(termEntry.getKey(), termEntry.getValue().toString()); } else { jgen.writeObjectField(termEntry.getKey(), termEntry.getValue()); } } jgen.writeEndObject(); // end context } }
From source file:org.apache.olingo.client.core.serialization.JsonEntitySerializer.java
protected void doContainerSerialize(final ResWrap<Entity> container, final JsonGenerator jgen) throws IOException, EdmPrimitiveTypeException { final Entity entity = container.getPayload(); jgen.writeStartObject();/*from w w w. j a va 2 s . com*/ if (serverMode) { if (container.getContextURL() != null) { jgen.writeStringField(Constants.JSON_CONTEXT, container.getContextURL().toASCIIString()); } if (StringUtils.isNotBlank(container.getMetadataETag())) { jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag()); } if (StringUtils.isNotBlank(entity.getETag())) { jgen.writeStringField(Constants.JSON_ETAG, entity.getETag()); } } if (StringUtils.isNotBlank(entity.getType()) && !isODataMetadataNone(contentType)) { jgen.writeStringField(Constants.JSON_TYPE, new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external()); } if (entity.getId() != null && !isODataMetadataNone(contentType)) { jgen.writeStringField(Constants.JSON_ID, entity.getId().toASCIIString()); } for (Annotation annotation : entity.getAnnotations()) { valuable(jgen, annotation, "@" + annotation.getTerm()); } for (Property property : entity.getProperties()) { valuable(jgen, property, property.getName()); } if (serverMode && entity.getEditLink() != null && StringUtils.isNotBlank(entity.getEditLink().getHref())) { jgen.writeStringField(Constants.JSON_EDIT_LINK, entity.getEditLink().getHref()); if (entity.isMediaEntity()) { jgen.writeStringField(Constants.JSON_MEDIA_READ_LINK, entity.getEditLink().getHref() + "/$value"); } } if (!isODataMetadataNone(contentType)) { links(entity, jgen); } for (Link link : entity.getMediaEditLinks()) { if (link.getTitle() == null) { jgen.writeStringField(Constants.JSON_MEDIA_EDIT_LINK, link.getHref()); } if (link.getInlineEntity() != null) { jgen.writeObjectField(link.getTitle(), link.getInlineEntity()); } if (link.getInlineEntitySet() != null) { jgen.writeArrayFieldStart(link.getTitle()); for (Entity subEntry : link.getInlineEntitySet().getEntities()) { jgen.writeObject(subEntry); } jgen.writeEndArray(); } } if (serverMode) { for (Operation operation : entity.getOperations()) { jgen.writeObjectFieldStart( "#" + StringUtils.substringAfterLast(operation.getMetadataAnchor(), "#")); jgen.writeStringField(Constants.ATTR_TITLE, operation.getTitle()); jgen.writeStringField(Constants.ATTR_TARGET, operation.getTarget().toASCIIString()); jgen.writeEndObject(); } } jgen.writeEndObject(); }
From source file:de.escalon.hypermedia.hydra.serialize.JacksonHydraSerializer.java
private void serializeContext(Object bean, JsonGenerator jgen, SerializerProvider serializerProvider, Deque<String> deque) throws IOException { try {/* w w w . jav a 2 s.com*/ // TODO use serializerProvider.getAttributes to hold a stack of contexts // and check if we need to write a context for the current bean at all // If it is in the same vocab: no context // If the terms are already defined in the context: no context SerializationConfig config = serializerProvider.getConfig(); final Class<?> mixInClass = config.findMixInClassFor(bean.getClass()); String vocab = getVocab(bean, mixInClass); Map<String, Object> terms = getTerms(bean, mixInClass); final String currentVocab = deque.peek(); deque.push(vocab); boolean mustWriteContext; if (currentVocab == null || !vocab.equals(currentVocab)) { mustWriteContext = true; } else { // only write if bean has terms if (terms.isEmpty()) { mustWriteContext = false; } else { // TODO actually, need not repeat vocab in context if same mustWriteContext = true; } } if (mustWriteContext) { // begin context // default context: schema.org vocab or vocab package annotation jgen.writeObjectFieldStart("@context"); // TODO do not repeat vocab if already defined in current context if (currentVocab == null || !vocab.equals(currentVocab)) { jgen.writeStringField(AT_VOCAB, vocab); } for (Map.Entry<String, Object> termEntry : terms.entrySet()) { if (termEntry.getValue() instanceof String) { jgen.writeStringField(termEntry.getKey(), termEntry.getValue().toString()); } else { jgen.writeObjectField(termEntry.getKey(), termEntry.getValue()); } } jgen.writeEndObject(); } // end context // TODO build the context from @Vocab and @Term and @Expose and write it as local or external context with // TODO jsonld extension (using apt?) // TODO also allow manually created jsonld contexts // TODO how to define a context containing several context objects? @context is then an array of // TODO external context strings pointing to json-ld, and json objects containing terms // TODO another option: create custom vocabulary without reference to public vocabs // TODO support additionalType from goodrelations } catch (Exception e) { throw new RuntimeException(e); } }
From source file:org.openiot.security.oauth.OAuth20ProfileController.java
@Override protected ModelAndView handleRequestInternal(final HttpServletRequest request, final HttpServletResponse response) throws Exception { final String accessToken = request.getParameter(OAuthConstants.ACCESS_TOKEN); log.debug("accessToken : {}", accessToken); final JsonFactory jsonFactory = new JsonFactory(); final JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(response.getWriter()); response.setContentType("application/json"); // accessToken is required if (StringUtils.isBlank(accessToken)) { log.error("missing accessToken"); jsonGenerator.writeStartObject(); jsonGenerator.writeStringField("error", OAuthConstants.MISSING_ACCESS_TOKEN); jsonGenerator.writeEndObject();/* w w w.j a v a 2s. c o m*/ jsonGenerator.close(); response.flushBuffer(); return null; } // get ticket granting ticket final TicketGrantingTicket ticketGrantingTicket = (TicketGrantingTicket) this.ticketRegistry .getTicket(accessToken); if (ticketGrantingTicket == null || ticketGrantingTicket.isExpired()) { log.error("expired accessToken : {}", accessToken); jsonGenerator.writeStartObject(); jsonGenerator.writeStringField("error", OAuthConstants.EXPIRED_ACCESS_TOKEN); jsonGenerator.writeEndObject(); jsonGenerator.close(); response.flushBuffer(); return null; } // generate profile : identifier + attributes final Principal principal = ticketGrantingTicket.getAuthentication().getPrincipal(); jsonGenerator.writeStartObject(); jsonGenerator.writeStringField(CasWrapperProfile.ID, principal.getId()); jsonGenerator.writeArrayFieldStart(CasWrapperProfile.ATTRIBUTES); final Map<String, Object> attributes = principal.getAttributes(); for (final String key : attributes.keySet()) { jsonGenerator.writeStartObject(); Object vals = attributes.get(key); if (vals instanceof Iterable<?>) { jsonGenerator.writeArrayFieldStart(key); for (final Object value : (Iterable<?>) vals) jsonGenerator.writeString(value.toString()); jsonGenerator.writeEndArray(); } else if ("role_name".equals(key)) { jsonGenerator.writeArrayFieldStart(key); if (!StringUtils.isBlank((String) vals)) jsonGenerator.writeString(vals.toString()); jsonGenerator.writeEndArray(); } else jsonGenerator.writeObjectField(key, attributes.get(key)); jsonGenerator.writeEndObject(); } jsonGenerator.writeEndArray(); jsonGenerator.writeEndObject(); jsonGenerator.close(); response.flushBuffer(); return null; }