Using simple JSP views thorugh the help of taglibs should be a clean way to give front end developers what they need. They should be able to get a JSON for their javascript needs in a single line:
<script> var employees = ${ju:toJson(employees)}; </script>Here is all you need to do in the back-end(middle tier). First you need a utility class that can take an object and serialize it to JSON. The winner in my journey so far is Jackson API so:
package com.nestorurquiza.utils; import java.io.IOException; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import com.nestorurquiza.serialization.JacksonObjectMapper; public final class JsonUtils { private JsonUtils() { } public static String toJson(Object value) throws JsonGenerationException, JsonMappingException, IOException { JacksonObjectMapper mapper = new JacksonObjectMapper(); return mapper.writeValueAsString(value); } }Here is the custom JsonObjectMapper class:
package com.nestorurquiza.serialization; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JacksonObjectMapper extends ObjectMapper { private static final Logger log = LoggerFactory.getLogger(JacksonObjectMapper.class); public JacksonObjectMapper() { configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false); } }Here is the taglib descriptor file /WEB-INF/tld/Json.tld:
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>2.1</tlib-version> <uri>JsonUtils</uri> <function> <name>toJson</name> <function-class>com.nestorurquiza.utils.JsonUtils</function-class> <function-signature> String toJson(java.lang.Object) </function-signature> </function> </taglib>Finally do not forget to include the taglib to use from JSP:
<%@ taglib prefix="ju" uri="/WEB-INF/tld/JsonUtils.tld"%>
No comments:
Post a Comment