package org.skyscreamer.yoga.view; import java.io.IOException; import java.io.OutputStream; import org.skyscreamer.yoga.mapper.YogaRequestContext; import org.skyscreamer.yoga.model.HierarchicalModel; import org.skyscreamer.yoga.model.ObjectListHierarchicalModelImpl; import org.skyscreamer.yoga.model.ObjectMapHierarchicalModelImpl; import org.skyscreamer.yoga.util.JacksonLibraryUtil; import org.skyscreamer.yoga.view.json.JsonSerializer; public class JsonSelectorView extends AbstractYogaView { private JsonSerializer jsonSerializer; public JsonSelectorView() { jsonSerializer = JacksonLibraryUtil.selectJacksonSerializer(); } public JsonSelectorView(JsonSerializer jsonSerializer) { this.jsonSerializer = jsonSerializer; } @Override public void render( Object value, YogaRequestContext requestContext, OutputStream outputStream ) throws IOException { HierarchicalModel<?> model; if (value instanceof Iterable<?>) { ObjectListHierarchicalModelImpl listModel = new ObjectListHierarchicalModelImpl(); _resultTraverser.traverseIterable( (Iterable<?>) value, requestContext.getSelector(), listModel, requestContext ); model = listModel; } else { ObjectMapHierarchicalModelImpl mapModel = new ObjectMapHierarchicalModelImpl(); _resultTraverser.traversePojo( value, requestContext.getSelector(), mapModel, requestContext ); model = mapModel; } jsonSerializer.serialize(outputStream, model.getUnderlyingModel()); } @Override public String getContentType() { return "application/json"; } @Override public String getHrefSuffix() { return "json"; } public void setSerializer(JsonSerializer jsonSerializer) { this.jsonSerializer = jsonSerializer; } }