[SPRING] 휴식 컨트롤러에서 JSON으로 간단한 문자열을 반환하는 방법
SPRING휴식 컨트롤러에서 JSON으로 간단한 문자열을 반환하는 방법
내 질문은 본질적으로이 질문에 대한 후속 조치입니다.
@RestController
public class TestController
{
@RequestMapping("/getString")
public String getString()
{
return "Hello World";
}
}
위의 경우 Spring은 "Hello World"를 응답 본문에 추가합니다. String을 JSON 응답으로 반환하려면 어떻게해야합니까? 따옴표를 추가 할 수 있다고 생각하지만 해킹처럼 느껴집니다.
이 개념을 설명하는 데 도움이되는 예제를 제공하십시오.
해결법
-
==============================
1.text / plain을 반환하거나 (Spring MVC 3 컨트롤러에서 문자열 메시지 만 반환) OR 문자열을 감싸는 것은 어떤 객체입니다
text / plain을 반환하거나 (Spring MVC 3 컨트롤러에서 문자열 메시지 만 반환) OR 문자열을 감싸는 것은 어떤 객체입니다
public class StringResponse { private String response; public StringResponse(String s) { this.response = s; } // get/set omitted... }
응답 유형을 application / json으로 설정하십시오.
@RequestMapping(value = "/getString", method = RequestMethod.GET, produces = "application/json")
다음과 같은 JSON이 있습니다.
{ "response" : "your string value" }
-
==============================
2.JSON은 본질적으로 PHP 또는 JAVA 컨텍스트의 String입니다. 즉 유효한 JSON이 응답으로 반환 될 수있는 문자열을 의미합니다. 다음은 작동해야합니다.
JSON은 본질적으로 PHP 또는 JAVA 컨텍스트의 String입니다. 즉 유효한 JSON이 응답으로 반환 될 수있는 문자열을 의미합니다. 다음은 작동해야합니다.
@RequestMapping(value="/user/addUser", method=RequestMethod.POST) @ResponseBody public String addUser(@ModelAttribute("user") User user) { if (user != null) { logger.info("Inside addIssuer, adding: " + user.toString()); } else { logger.info("Inside addIssuer..."); } users.put(user.getUsername(), user); return "{\"success\":1}"; }
이것은 간단한 문자열 응답에도 괜찮습니다. 그러나 복잡한 JSON 응답의 경우 Shaun이 설명한대로 래퍼 클래스를 사용해야합니다.
-
==============================
3.이 질문을 올린 이후 JSONObject (maven dependency info)를 사용하기 시작했습니다. 특히 팀과 함께 일하면서, 원하는 모든 것이 단순한 String 일 때 어떤 래퍼 객체보다는 String을 반환하는 것이 더 쉽다는 것을 알게되었습니다.
이 질문을 올린 이후 JSONObject (maven dependency info)를 사용하기 시작했습니다. 특히 팀과 함께 일하면서, 원하는 모든 것이 단순한 String 일 때 어떤 래퍼 객체보다는 String을 반환하는 것이 더 쉽다는 것을 알게되었습니다.
사용 예 :
@RestController public class TestController { @RequestMapping("/getString") public String getString() { return JSONObject.quote("Hello World"); } }
-
==============================
4.다음과 같이 속성 응답에 JSON을 문자열과 함께 쉽게 반환 할 수 있습니다.
다음과 같이 속성 응답에 JSON을 문자열과 함께 쉽게 반환 할 수 있습니다.
@RestController public class TestController { @RequestMapping((value = "/getString", produces = MediaType.APPLICATION_JSON_VALUE) public Map getString() { return Collections.singletonMap("response", "Hello World"); } }
-
==============================
5.단순히 기본 StringHttpMessageConverter 인스턴스를 등록 해제하십시오.
단순히 기본 StringHttpMessageConverter 인스턴스를 등록 해제하십시오.
@Configuration public class WebMvcConfiguration extends WebMvcConfigurationSupport { /** * Unregister the default {@link StringHttpMessageConverter} as we want Strings * to be handled by the JSON converter. * * @param converters List of already configured converters * @see WebMvcConfigurationSupport#addDefaultHttpMessageConverters(List) */ @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.stream() .filter(c -> c instanceof StringHttpMessageConverter) .findFirst().ifPresent(converters::remove); } }
컨트롤러 액션 핸들러 메소드와 컨트롤러 예외 핸들러로 테스트 :
@RequestMapping("/foo") public String produceFoo() { return "foo"; } @ExceptionHandler(FooApiException.class) public String fooException(HttpServletRequest request, Throwable e) { return e.getMessage(); }
최종 메모 :
-
==============================
6.나는이 질문이 오래되었다는 것을 알고 있지만 나는 또한 공헌하고 싶다.
나는이 질문이 오래되었다는 것을 알고 있지만 나는 또한 공헌하고 싶다.
다른 응답들과의 주요 차이점은 해시 맵 리턴이다.
@GetMapping("...") @ResponseBody public HashMap<String, Object> endPointExample(...) { HashMap<String, Object> rtn = new LinkedHashMap<String, Object>(); rtn.put("pic", image); rtn.put("potato", "King Potato"); return rtn; }
그러면 다음과 같이 반환됩니다.
{"pic":"a17fefab83517fb...beb8ac5a2ae8f0449","potato":"King Potato"}
-
==============================
7.produce = "application / json"을 @RequestMapping 주석에 다음과 같이 추가합니다.
produce = "application / json"을 @RequestMapping 주석에 다음과 같이 추가합니다.
@RequestMapping(value = "api/login", method = RequestMethod.GET, produces = "application/json")
힌트 : 리턴 값으로 ResponseEntity
- 타입을 사용하는 것이 좋습니다. JSON 본문에서 생성 된 데이터는 하나의 간단한 문자열이 아닌 해당 사양에 따라 배열 또는 객체 여야하기 때문입니다. 때때로 문제가 발생할 수 있습니다 (예 : Observables in Angular2).
차:
json으로 반환 된 문자열 : "example"
Json으로
목록을 반환했습니다 : [ "example"] -
==============================
8.@ResponseBody 어노테이션을 추가하면 리턴 데이터가 출력 스트림에 기록됩니다.
@ResponseBody 어노테이션을 추가하면 리턴 데이터가 출력 스트림에 기록됩니다.
-
==============================
9.스프링 MVC 4에서 객체의 기본 응답 유형은 JSON입니다. 그래서 당신이해야 할 일은 당신의 String을 어떤 Object로 감싸는 것입니다.
스프링 MVC 4에서 객체의 기본 응답 유형은 JSON입니다. 그래서 당신이해야 할 일은 당신의 String을 어떤 Object로 감싸는 것입니다.
public class StringResponse { private String response; public StringResponse(String s) { this.response = s; } // getters and setters }
String 대신 StringResponse를 반환하는 것을 제외하고는 컨트롤러를 수정하지 않습니다.
-
==============================
10.이 주석을 메소드에 추가하십시오.
이 주석을 메소드에 추가하십시오.
@RequestMapping(value = "/getString", method = RequestMethod.GET, produces = "application/json")
from https://stackoverflow.com/questions/30895286/spring-mvc-how-to-return-simple-string-as-json-in-rest-controller by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 컨트롤러의 범위와 인스턴스 변수 (0) | 2018.12.16 |
---|---|
[SPRING] 롤백 전용으로 표시된 트랜잭션 : 원인을 찾는 방법 (0) | 2018.12.16 |
[SPRING] 시험 및 생산을위한 스프링 특성 대체 (0) | 2018.12.16 |
[SPRING] @ 자동 및 정적 메서드 (0) | 2018.12.16 |
[SPRING] spring-data-jpa 및 spring-mvc를 사용하여 데이터베이스 행 필터링 (0) | 2018.12.16 |