-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
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) {