X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.json%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fserver%2Fjson%2Fmvc%2FJsonView.java;h=2d342e9b3eaf2da1840a1c9ba8501be89b8fe80c;hb=e241a5585404c07bea8351c4112be64512ad7fb9;hp=fcd070a4aa780622b899ceab9507f6207c89c864;hpb=6a6a3ad253f3d52cda5f7e9f4a59815c05a242c9;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java index fcd070a4a..2d342e9b3 100644 --- a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java +++ b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java @@ -1,17 +1,25 @@ -package org.argeo.slc.web.mvc; +package org.argeo.server.json.mvc; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.argeo.server.ArgeoServerException; +import org.codehaus.jackson.JsonFactory; +import org.codehaus.jackson.JsonGenerator; +import org.codehaus.jackson.map.ObjectMapper; import org.springframework.web.servlet.view.AbstractView; /** Marshal one of the object of the map to the output. */ public class JsonView extends AbstractView { + private JsonFactory jsonFactory = new JsonFactory(); + private ObjectMapper objectMapper = new ObjectMapper(); + private String modelKey = null; - public JsonView() { + public JsonView(String modelKey) { + this.modelKey = modelKey; } @Override @@ -20,24 +28,26 @@ public class JsonView extends AbstractView { HttpServletRequest request, HttpServletResponse response) throws Exception { final Object answer; - if (modelKey != null) { + if (model.size() == 1) + answer = model.values().iterator().next(); + else if (modelKey != null) { if (!model.containsKey(modelKey)) - throw new SlcException("Key " + modelKey + throw new ArgeoServerException("Key " + modelKey + " not found in model."); answer = model.get(modelKey); - } else { - if (model.size() != 1) - throw new SlcException( - "Model has a size different from 1. Specify a modelKey."); - answer = model.values().iterator().next(); + } else {// models.size!=1 and no modelKey + throw new ArgeoServerException( + "Model has a size different from 1. Specify a modelKey."); } - if (answer instanceof JSONObject) { - ((JSONObject) answer).write(response.getWriter()); - } else { - JSONObject jsonObject = new JSONObject(answer); - jsonObject.write(response.getWriter()); - } + response.setContentType("application/json"); + + JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(response + .getWriter()); + jsonGenerator.useDefaultPrettyPrinter(); + + objectMapper.writeValue(jsonGenerator, answer); + } public void setModelKey(String modelKey) {