[SPRING] Spring Rest Controller의 JSON 반환 값으로 사용되는 간단한 문자열
SPRINGSpring Rest Controller의 JSON 반환 값으로 사용되는 간단한 문자열
다음의 간단한 테스트 컨트롤러 (Spring 4.0.3에서 사용됨)를 살펴 보자 :
@RestController
public class TestController
{
@RequestMapping("/getList")
public List<String> getList()
{
final List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
return list;
}
@RequestMapping("/getString")
public String getString()
{
return "Hello World";
}
}
이론적으로 두 컨트롤러 메소드 모두 유효한 JSON을 반환해야합니다. 실제로 첫 번째 컨트롤러 메서드를 호출하면 다음 JSON 배열이 반환됩니다.
$ curl -i -H "Accept: application/json" http://localhost:8080/getList
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
["1","2"]
그러나 두 번째 컨트롤러 메서드는 유효한 JSON 문자열이 아닌 따옴표없이 문자열을 반환합니다.
$ curl -i -H "Accept: application/json" http://localhost:8080/getString
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Hello World
왜 이렇게이다? 그것을 구성 할 수 있습니까? 그게 버그 야? 아니면 이해할 수없는 기능입니까?
해결법
-
==============================
1.String 객체를 반환하면 Spring MVC는 이것을 응답 본문에 넣을 내용으로 해석하고 더 이상 수정하지 않습니다. 실제 문자열을 JSON 응답으로 사용하려면 직접 인용하거나 잭슨을 통해 명시 적으로 실행해야합니다.
String 객체를 반환하면 Spring MVC는 이것을 응답 본문에 넣을 내용으로 해석하고 더 이상 수정하지 않습니다. 실제 문자열을 JSON 응답으로 사용하려면 직접 인용하거나 잭슨을 통해 명시 적으로 실행해야합니다.
-
==============================
2.주석에서 언급 한 것처럼 Jackson 변환기 앞에 등록 된 StringHttpMessageConverter를 제거 할 수 있습니다.
주석에서 언급 한 것처럼 Jackson 변환기 앞에 등록 된 StringHttpMessageConverter를 제거 할 수 있습니다.
/** * Unregister the default {@link StringHttpMessageConverter} as we want * Strings to be handled by the JSON converter. * * Our MappingJackson2HttpMessageConverter will deal with strings. * * @param converters * List of already configured converters */ @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.removeIf(converter -> converter instanceof StringHttpMessageConverter); }
-
==============================
3.String 객체를 반환하기를 원한다면 Spring MVC는 그 내용을 응답 본문에 넣을 내용으로 해석하고 더 이상 수정하지 않는다. 실제 문자열을 JSON 응답으로 사용하려면 직접 인용하거나 잭슨을 통해 명시 적으로 실행해야합니다.
String 객체를 반환하기를 원한다면 Spring MVC는 그 내용을 응답 본문에 넣을 내용으로 해석하고 더 이상 수정하지 않는다. 실제 문자열을 JSON 응답으로 사용하려면 직접 인용하거나 잭슨을 통해 명시 적으로 실행해야합니다.
@RestController public class TestController { @RequestMapping("/getString") public String getString() { return JSONObject.quote("Hello World"); } }
-
==============================
4.다음은이 작업을 수행하기위한 단계입니다.
다음은이 작업을 수행하기위한 단계입니다.
from https://stackoverflow.com/questions/23581619/simple-string-as-json-return-value-in-spring-rest-controller by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] ClassNotFoundException - FreeMarkerConfigurationFactory (0) | 2019.02.23 |
---|---|
[SPRING] 스프링 부트 용 외부 라이브러리 폴더 (0) | 2019.02.23 |
[SPRING] 스프링 부트 애플리케이션을 프로그래밍 방식으로 재시작 (0) | 2019.02.22 |
[SPRING] RestTemplate을 사용하여 요청 당 RequestConfiguration을 설정하는 방법 (0) | 2019.02.22 |
[SPRING] Spring ResponseEntity (0) | 2019.02.22 |