cn.newgxu.lab.core.config.MappingJacksonJsonpView.java Source code

Java tutorial

Introduction

Here is the source code for cn.newgxu.lab.core.config.MappingJacksonJsonpView.java

Source

/*
 * Copyright (c) 2001-2013 newgxu.cn <the original author or authors>.
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package cn.newgxu.lab.core.config;

import java.util.Map;

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

import org.springframework.web.servlet.view.json.MappingJacksonJsonView;

/**
 * ?jsonp?MappingJacksonJsonView
 * 
 * jsonp??
 *       1?jsonpspring?????
 *       2GET
 *       3?callback?
 * ??json
 * 
 * @author longkai
 * @email im.longkai@gmail.com
 * @since 2013-4-13
 * @version 0.1
 */
public class MappingJacksonJsonpView extends MappingJacksonJsonView {

    public static final String DEFAULT_CONTENT_TYPE = "application/javascript";

    public MappingJacksonJsonpView() {
        //      ??????spirngencoding filter?
        setContentType(DEFAULT_CONTENT_TYPE);
    }

    @Override
    public String getContentType() {
        //      ??spring?application/javascript??
        return DEFAULT_CONTENT_TYPE;
    }

    @Override
    public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        if (request.getMethod().toUpperCase().equals("GET")) {
            if (request.getParameterMap().containsKey("callback")) {
                ServletOutputStream ostream = response.getOutputStream();
                //            try
                ostream.write(new String("try{" + request.getParameter("callback") + "(").getBytes());
                super.render(model, request, response);
                ostream.write(new String(");}catch(e){}").getBytes());
                //            ????closeflushspring?
                //            ?
                ostream.flush();
                ostream.close();
            } else {
                super.render(model, request, response);
            }
        } else {
            super.render(model, request, response);
        }
    }

}