I am trying to use the JsonView class but can't find any documentation. I guess I should override the renderMergedOutputModel(..) method, but I don't know what exactly do. Could you please provide a small code snippet?
Thanks
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Yes, that would be the most common way. Only if you need to do some pre-processing of your data before output that you'll be concerned with the other protected methods from JsonView.
Glad you got it working :)
Cheers,
Andres
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
There are several ways to do it :) The easiest one is registering a String[] of exclusions via excludedProperties, but it has a drawback, say you write something like
Thanks so much for your help, is highly appreciated. Now only one problem remains.
I have two JsonBeanProcessors corresponding to two of my domain classes and a JsonBeanProcessorMatcher as you mention in your blog post.
My domain hierarchy looks like this --> User.Company.Category <--
The JsonBeanProcessors correspond to User and Company classes. The Company's JsonBeanProcessor does not include the category property, but I am still getting the Hibernate's LazyInitializationException regarding to Company's category property. Why?
If in User's JsonBeanProcessor I comment out the code as follows, the Json string is generated fine.
...
User user = (User) bean;
return new JSONObject()
.element("name", user.getName())
//.element("company", user.getCompany()) <-- Commented out
.element("mail", user.getEmail());
...
Why doesn't Json-lib take into account the Company's JsonBeanProcessor?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Andrés,
I am trying to use the JsonView class but can't find any documentation. I guess I should override the renderMergedOutputModel(..) method, but I don't know what exactly do. Could you please provide a small code snippet?
Thanks
After a while, now is working. The Spring configuration I have is as follows:
The lms-views.xml file:
<bean id="jsonView" class="net.sf.json.spring.web.servlet.view.JsonView" />
The lms-servlet.xml
<bean id="myViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location" value="classpath:lms-views.xml" />
<property name="order" value="0" />
</bean>
<bean id="jsonController" class="com.myapp.JsonController">
<property name="catalogService" ref="catalogService" />
</bean>
The jsonController looks like this:
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map model = new HashMap();
model.put("paises", catalogService.getPaises());
return new ModelAndView("jsonView", model);
}
Please let me know if this is the right configuration.
Yes, that would be the most common way. Only if you need to do some pre-processing of your data before output that you'll be concerned with the other protected methods from JsonView.
Glad you got it working :)
Cheers,
Andres
I wonder how I could exclude nested properties, for example I have this:
MainObject.propertya.propertyb
What would I do in order to exclude from propertya down the hierarchy?
I realized that is not possible to use dot notation (as shown below) in the "excludedeProperties" bean property.
<bean id="jsonView" class="net.sf.json.spring.web.servlet.view.JsonView">
<property name="excludedProperties" value="propertya.propertyb" />
</bean>
What would be the option to exclude nested properties?
Alfredo,
There are several ways to do it :) The easiest one is registering a String[] of exclusions via excludedProperties, but it has a drawback, say you write something like
<bean id="jsonView" class="net.sf.json.spring.web.servlet.view.JsonView">
<property name="excludedProperties" value="propertyb,propertyc" />
</bean>
then for any bean property (not just MainObject) that matches that list will be excluded.
There are other alternatives as I previously mentioned, you can find a description of them at the following link
http://jroller.com/aalmiray/entry/json_lib_hibernate_tips_and
You'll have to create an instance of JsonConfig, set the desired configuration props/flags and wire it up into your views.
Cheers,
Andres
Andrés,
Thanks so much for your help, is highly appreciated. Now only one problem remains.
I have two JsonBeanProcessors corresponding to two of my domain classes and a JsonBeanProcessorMatcher as you mention in your blog post.
My domain hierarchy looks like this --> User.Company.Category <--
The JsonBeanProcessors correspond to User and Company classes. The Company's JsonBeanProcessor does not include the category property, but I am still getting the Hibernate's LazyInitializationException regarding to Company's category property. Why?
If in User's JsonBeanProcessor I comment out the code as follows, the Json string is generated fine.
...
User user = (User) bean;
return new JSONObject()
.element("name", user.getName())
//.element("company", user.getCompany()) <-- Commented out
.element("mail", user.getEmail());
...
Why doesn't Json-lib take into account the Company's JsonBeanProcessor?
Alfredo,
Could you post the code of your JsonBeanProcessorMatcher? thanks!
Andres
Yes, of course, here it is:
private class MyJsonBeanProcessorMatcher extends JsonBeanProcessorMatcher {
@SuppressWarnings("unchecked")
@Override
public Object getMatch(Class target, Set set) {
for (Object match : set) {
if (((Class) match).isAssignableFrom(target)) {
return match;
}
}
return null;
}
}
Andés,
Te problem occurs when the method JSONObject.element() is called from UserJsonBeanProcessor, see the implementation:
public JSONObject element( String key, Object value ) {
return element( key, value, new JsonConfig() );
}
Is created a new JsonConfig object, with an empty beanProcessorMap.
Now is working fine, I haven't seen the method:
public JSONObject element( String key, Object value, JsonConfig jsonConfig )
Thanks a lot and congratulations for such great framework!!