어떻게 springmvc 에서 jsonp 형식 을 되 돌려 줍 니까?

6974 단어 자바javawebspring
springmvc 4.1 이상 버 전 을 사용 해 야 합 니 다.MappingJackson 2HttpMessage Converter 같은 종 류 를 계승 하여 writeInternal 방법 을 다시 써 야 합 니 다.기본 단계:MappingJackson 2HttpMessage Converter 를 계승 하 는 클래스 쓰기
package com.ljlx.filter;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonProcessingException;
//springmvc  jsonp  
public class CallbackMappingJackson2HttpMessageConverter extends
        MappingJackson2HttpMessageConverter {
     //  jsonp      ,            
    private String callbackName;  

    @Override  
    protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {  
        //  threadLocal      Request    
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();  
        String callbackParam = request.getParameter(callbackName);  
        if(StringUtils.isEmpty(callbackParam)){  
            //     callback  ,    json    
            super.writeInternal(object, outputMessage);  
        }else{  
            JsonEncoding encoding = getJsonEncoding(outputMessage.getHeaders().getContentType());  
            try {  
                String result =callbackParam+"("+super.getObjectMapper().writeValueAsString(object)+");";  
                IOUtils.write(result, outputMessage.getBody(),encoding.getJavaName());  
            }  
            catch (JsonProcessingException ex) {  
                throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex);  
            }  
        }  

    }  

    public String getCallbackName() {  
        return callbackName;  
    }  

    public void setCallbackName(String callbackName) {  
        this.callbackName = callbackName;  
    }  
}

2.springmvc.xml 파일 에 사용자 정의 메시지 변환기 추가
    <mvc:annotation-driven >
       
    <mvc:message-converters>  
          
        <bean class="com.ljlx.filter.CallbackMappingJackson2HttpMessageConverter">  
              
            <property name="callbackName" value="callback">property>  
        bean>  
    mvc:message-converters>
    mvc:annotation-driven>

좋은 웹페이지 즐겨찾기