Step 1 : 添加JSONP转换器
public class JsonpHttpMessageConverter extends MappingJackson2HttpMessageConverter {
@Override
protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
JsonEncoding encoding = getJsonEncoding(outputMessage.getHeaders().getContentType());
JsonGenerator jsonGenerator = this.getObjectMapper().getFactory().createGenerator(outputMessage.getBody(), encoding);
try {
//ConfigContainer.JSONP_CALLBACK 为回调名称,如"callback"
jsonGenerator.writeRaw(ConfigContainer.JSONP_CALLBACK);
jsonGenerator.writeRaw('(');
this.getObjectMapper().writeValue(jsonGenerator, object);
jsonGenerator.writeRaw(");");
jsonGenerator.flush();
} catch (JsonProcessingException ex) {
throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex);
}
}
}
step 2 : 添加配置
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="...JsonpHttpMessageConverter" p:supportedMediaTypes="application/jsonp"/> </mvc:message-converters> </mvc:annotation-driven>
ok!
test:
$.ajax({ type: <your type>, url: <your url>, dataType: 'jsonp', jsonpCallback: 'JsonpCallback', //这个值要与第一步的ConfigContainer.JSONP_CALLBACK同名 contentType: 'application/jsonp;charset=UTF-8', }).done(function (result) { //TODO }).fail(function (result, textStatus, info) { //TODO }); }