All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.json.spring.web.servlet.view.JsonView Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2006-2008 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.sf.json.spring.web.servlet.view;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import net.sf.json.util.PropertyFilter;
import net.sf.json.filters.OrPropertyFilter;

import org.springframework.web.servlet.view.AbstractView;

/**
 * A View that renders its model as a JSON object.
 *
 * @author Andres Almiray 
 */
public class JsonView extends AbstractView {
   /** Default content type. Overridable as bean property. */
   private static final String DEFAULT_JSON_CONTENT_TYPE = "application/json";
   private boolean forceTopLevelArray = false;
   private boolean skipBindingResult = true;
   /** Json confiiguration */
   private JsonConfig jsonConfig = new JsonConfig();
   
   public JsonView() {
      super();
      setContentType( DEFAULT_JSON_CONTENT_TYPE );
   }

   public JsonConfig getJsonConfig(){
      return jsonConfig;
   }

   public boolean isForceTopLevelArray() {
      return forceTopLevelArray;
   }

   /**
    * Returns whether the JSONSerializer will ignore or not its internal property
    * exclusions.
    */
   public boolean isIgnoreDefaultExcludes() {
      return jsonConfig.isIgnoreDefaultExcludes();
   }

   /**
    * Returns whether the JSONSerializer will skip or not any BindingResult related keys on the model.

* Models in Spring >= 2.5 will cause an exception as they contain a BindingResult that cycles back. */ public boolean isSkipBindingResult() { return skipBindingResult; } /** * Sets the group of properties to be excluded. */ public void setExcludedProperties( String[] excludedProperties ) { jsonConfig.setExcludes( excludedProperties ); } public void setForceTopLevelArray( boolean forceTopLevelArray ) { this.forceTopLevelArray = forceTopLevelArray; } /** * Sets whether the JSONSerializer will ignore or not its internal property * exclusions. */ public void setIgnoreDefaultExcludes( boolean ignoreDefaultExcludes ) { jsonConfig.setIgnoreDefaultExcludes( ignoreDefaultExcludes ); } public void setJsonConfig( JsonConfig jsonConfig ) { this.jsonConfig = jsonConfig != null ? jsonConfig : new JsonConfig(); if( skipBindingResult ){ PropertyFilter jsonPropertyFilter = this.jsonConfig.getJsonPropertyFilter(); if( jsonPropertyFilter == null ) { this.jsonConfig.setJsonPropertyFilter( new BindingResultPropertyFilter() ); }else{ this.jsonConfig.setJsonPropertyFilter( new OrPropertyFilter(new BindingResultPropertyFilter(), jsonPropertyFilter) ); } } } /** * Sets whether the JSONSerializer will skip or not any BindingResult related keys on the model.

* Models in Spring >= 2.5 will cause an exception as they contain a BindingResult that cycles back. */ public void setSkipBindingResult( boolean skipBindingResult ) { this.skipBindingResult = skipBindingResult; } /** * Creates a JSON [JSONObject,JSONArray,JSONNUll] from the model values. */ protected JSON createJSON( Map model, HttpServletRequest request, HttpServletResponse response ) { return defaultCreateJSON( model ); } /** * Creates a JSON [JSONObject,JSONArray,JSONNUll] from the model values. */ protected final JSON defaultCreateJSON( Map model ) { if( skipBindingResult && jsonConfig.getJsonPropertyFilter() == null ){ this.jsonConfig.setJsonPropertyFilter( new BindingResultPropertyFilter() ); } return JSONSerializer.toJSON( model, jsonConfig ); } /** * Returns the group of properties to be excluded. */ protected String[] getExcludedProperties() { return jsonConfig.getExcludes(); } protected void renderMergedOutputModel( Map model, HttpServletRequest request, HttpServletResponse response ) throws Exception { response.setContentType( getContentType() ); writeJSON( model, request, response ); } protected void writeJSON( Map model, HttpServletRequest request, HttpServletResponse response ) throws Exception { JSON json = createJSON( model, request, response ); if( forceTopLevelArray ){ json = new JSONArray().element(json); } json.write( response.getWriter() ); } private static class BindingResultPropertyFilter implements PropertyFilter { public boolean apply( Object source, String name, Object value ) { return name.startsWith("org.springframework.validation.BindingResult."); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy