[SPRING] Spring 3.0과 Jackson이있는 JSONP
SPRINGSpring 3.0과 Jackson이있는 JSONP
Spring 3.0에서 JSON 응답을 반환하려면 @ResponseBody 주석을 @Controller 내부의 @RequestMapping과 함께 추가하면 충분합니다. MapppingJacksonJson 라이브러리가로드되고 클라이언트가 application / json과 함께 Accept 헤더를 보내는 경우, 작동합니다.
JSONP는 어떻습니까? 그것을 반환 할 수 있습니까?
해결법
-
==============================
1.이 블로그 게시물에 대한 Jeremy Grelle의 답변을 참조하십시오. 여기에 또 다른 튜토리얼이 있습니다.
이 블로그 게시물에 대한 Jeremy Grelle의 답변을 참조하십시오. 여기에 또 다른 튜토리얼이 있습니다.
-
==============================
2.이 블로그 게시물은 정확하고 압축 된 솔루션을 보여줍니다. Spring MVC 3.0.x에서 JSONP 구현하기
이 블로그 게시물은 정확하고 압축 된 솔루션을 보여줍니다. Spring MVC 3.0.x에서 JSONP 구현하기
이것은 Spring 3.1에서 더 잘 작동합니다 : Spring 3.1의 XML, JSON, JSON-P 웹 서비스 끝점
Spring 3.2의 경우 여기 Jackson2 기반 JSONP 변환기가있다.
import java.io.IOException; import org.springframework.http.HttpOutputMessage; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; public class MappingJackson2JsonpHttpMessageConverter extends MappingJackson2HttpMessageConverter { @Override protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { JsonEncoding encoding = getJsonEncoding(outputMessage.getHeaders().getContentType()); JsonGenerator jsonGenerator = this.getObjectMapper().getFactory().createJsonGenerator(outputMessage.getBody(), encoding); try { String jsonPadding = "callback"; // If the callback doesn't provide, use the default callback if (object instanceof IJsonpObject) { String jsonCallback = ((IJsonpObject)object).getJsonCallback(); if (jsonCallback != null) { jsonPadding = jsonCallback; } } jsonGenerator.writeRaw(jsonPadding); jsonGenerator.writeRaw('('); this.getObjectMapper().writeValue(jsonGenerator, object); jsonGenerator.writeRaw(");"); jsonGenerator.flush(); } catch (JsonProcessingException ex) { throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex); } } }
이를 추가하려면 구성에이 bean을 넣으십시오.
import java.util.List; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.google.common.collect.Lists; public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters( List<HttpMessageConverter<?>> converters ) { MappingJackson2JsonpHttpMessageConverter converter = new MappingJackson2JsonpHttpMessageConverter(); converter.setSupportedMediaTypes( Lists.newArrayList( new MediaType( "application", "x-javascript" ), new MediaType( "application", "javascript" ), new MediaType( "text", "javascript" ) ) ); converters.add( converter ); } }
-
==============================
3.Spring 4.1부터는 다음과 같이 쉽게 할 수 있습니다 :
Spring 4.1부터는 다음과 같이 쉽게 할 수 있습니다 :
@RestController public class MyController { @RequestMapping("/endpoint") MappingJacksonValue getData(@RequestParam String callback) { MappingJacksonValue value = new MappingJacksonValue(new MyPojo()); value.setJsonpFunction(callback); return value; } }
-
==============================
4.JSONP 접근법 (JSONP / CORS가 내장 된 IMO ... 사용자 정의 코드 필요 없음)에 대한보다 간단한 OOB 접근 방식을 찾고있었습니다 ... 결코 발견 된 바는 없지만 Spring 팀에 문의 한 후 이제 JSONP가 MappingJacksonJsonView를 통해 4.0.5에서 OOB로 지원되고 나중에 지원하기 위해 supportCORS가 내장되어 있습니다.
JSONP 접근법 (JSONP / CORS가 내장 된 IMO ... 사용자 정의 코드 필요 없음)에 대한보다 간단한 OOB 접근 방식을 찾고있었습니다 ... 결코 발견 된 바는 없지만 Spring 팀에 문의 한 후 이제 JSONP가 MappingJacksonJsonView를 통해 4.0.5에서 OOB로 지원되고 나중에 지원하기 위해 supportCORS가 내장되어 있습니다.
-
==============================
5.https://github.com/bhagyas/spring-jsonp-support에서 살펴보십시오.
https://github.com/bhagyas/spring-jsonp-support에서 살펴보십시오.
도움이되기를 바랍니다.
from https://stackoverflow.com/questions/7655975/jsonp-with-spring-3-0-and-jackson by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링의 @RequestBody 및 @RequestParam 학습 (0) | 2019.01.28 |
---|---|
[SPRING] Flex 4 마이그레이션 경험이 있습니까? (0) | 2019.01.28 |
[SPRING] Spring 3.1에서 remember-me 기능으로 사용자 로그인하기 (0) | 2019.01.28 |
[SPRING] 세션 지원을 사용하는 Spring mvc 3.1 통합 테스트 (0) | 2019.01.28 |
[SPRING] web.xml과 같이 spring-boot 서블릿을 설정하는 방법은? (0) | 2019.01.28 |