Spring MVC 3 컨트롤러에서 문자열 메시지만 반환
컨트롤러에서 문자열 메시지를 반환하는 방법을 알려 주실 수 있나요?
컨트롤러 메서드에서 문자열을 반환하기만 하면 jsp 뷰 이름으로 처리되는 spring mvc가 됩니다.
컨트롤러의 메서드에 주석을 붙입니다.@ResponseBody
:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
시작: 15.3.2.6 응답 본문과 주석 매핑:
그
@ResponseBody
주석 [...]을(를) 메서드에 붙일 수 있으며 반환 유형을 HTTP 응답 본문에 직접 작성해야 함을 나타냅니다(모델에 배치하거나 보기 이름으로 해석하지 않음).
Spring 4에서는 컨트롤러에 다음과 같은 주석이 붙어 있는 경우@RestController
대신@Controller
는 필요 없습니다.@ResponseBody
주석입니다.
암호는 다음과 같습니다.
@RestController
public class FooController {
@RequestMapping(value="/controller", method=GET)
public String foo() {
return "Response!";
}
}
다음 Javadoc을 찾을 수 있습니다.@RestController
여기서
@Tomasz가 절대적으로 옳습니다만, 다른 방법이 있습니다.
@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
try {
PrintWriter out = res.getWriter();
out.println("Hello, world!");
out.close();
} catch (IOException ex) {
...
}
}
첫 번째 방법이 더 좋습니다.사용자 정의 내용 유형으로 응답을 반환하거나 이진 유형(파일 등)을 반환하려는 경우 이 방법을 사용할 수 있습니다.);
나중에 이 질문을 찾을 수 있는 사용자를 위한 참고 사항이지만, 내용 유형을 변경하기 위해 응답을 가져올 필요는 없습니다.이를 실현하기 위한 예를 다음에 제시하겠습니다.
@RequestMapping(method = RequestMethod.GET, value="/controller")
public ResponseEntity<byte[]> displayUploadedFile()
{
HttpHeaders headers = new HttpHeaders();
String disposition = INLINE;
String fileName = "";
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//Load your attachment here
if (Arrays.equals(Constants.HEADER_BYTES_PDF, contentBytes)) {
headers.setContentType(MediaType.valueOf("application/pdf"));
fileName += ".pdf";
}
if (Arrays.equals(Constants.HEADER_BYTES_TIFF_BIG_ENDIAN, contentBytes)
|| Arrays.equals(Constantsr.HEADER_BYTES_TIFF_LITTLE_ENDIAN, contentBytes)) {
headers.setContentType(MediaType.valueOf("image/tiff"));
fileName += ".tif";
}
if (Arrays.equals(Constants.HEADER_BYTES_JPEG, contentBytes)) {
headers.setContentType(MediaType.IMAGE_JPEG);
fileName += ".jpg";
}
//Handle other types if necessary
headers.add("Content-Disposition", , disposition + ";filename=" + fileName);
return new ResponseEntity<byte[]>(uploadedBytes, headers, HttpStatus.OK);
}
그럼 어떻게 되는 거죠?
PrintWriter out = response.getWriter();
out.println("THE_STRING_TO_SEND_AS_RESPONSE");
return null;
이거 나한테 딱이야.
출력용String
~하듯이text/plain
용도:
@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
return "bar";
}
@Controller
public class HelloController {
@RequestMapping(value = "/", method = RequestMethod.GET)
ResponseEntity<String> sayHello() {
return ResponseEntity.ok("Hello");
}
}
가장 심플한 솔루션:
따옴표를 추가해 주세요.응답 타입이 어플리케이션/json으로 정의되어 있는데 Spring boot에 의해 자동 구현되지 않는 이유를 잘 모르겠습니다만, 동작은 훌륭합니다.
@PostMapping("/create")
public String foo()
{
String result = "something"
return "\"" + result + "\"";
}
두 가지 가능한 해결책이 있습니다.
사용하다
@Controller
그리고.@ResponseBody
HTML 페이지와 문자열 메시지를 조합하여 다양한 기능을 수행합니다.@Controller @RequestMapping({ "/user/registration"}) public class RegistrationController { @GetMapping public String showRegistrationForm(Model model) { model.addAttribute("user", new UserDto()); return "registration"; //Returns the registration.html } @PostMapping @ResponseBody public String registerUserAccount(@Valid final UserDto accountDto, final HttpServletRequest request) { LOGGER.debug("Registering user account with information: {}", accountDto); return "Successfully registered" // Returns the string }
사용하다
@RestController
String 메시지를 반환합니다.이 경우 HTML 페이지를 반환하는 함수를 사용할 수 없습니다.@RestController @RequestMapping({ "/user/registration"}) public class RegistrationController { @PostMapping public String registerUserAccount(@Valid @RequestBody final UserDto accountDto, final HttpServletRequest request) { LOGGER.debug("Registering user account with information: {}", accountDto); return "Successfully registered" // Returns the string }
@ResponseBody
@RequestMapping(value="/get-text", produces="text/plain")
public String myMethod() {
return "Response!";
}
- 보이시죠?
@ResponseBody
?
이 메서드는 일부 텍스트를 반환하고 뷰 등으로 해석하지 않는 것을 말합니다.
- 보이시죠?
produces="text/plain"
?
이 방법은 메서드에서 반환되는 내용을 알려주기 때문에 모범 사례일 뿐입니다.
언급URL : https://stackoverflow.com/questions/7672858/return-only-string-message-from-spring-mvc-3-controller
'programing' 카테고리의 다른 글
MySQL Like 다중값 (0) | 2023.01.29 |
---|---|
함수 포인터 정의가 앰퍼샌드 '&' 또는 아스터리스크 '*'의 수에 관계없이 작동하는 이유는 무엇입니까? (0) | 2023.01.29 |
명령줄 인수를 npm 스크립트로 보내는 중 (0) | 2023.01.29 |
Mesos 또는 Core에서 MariaDB 및 Redis의 고가용성 클러스터를 설정하는 방법OS (0) | 2023.01.29 |
선언된 패키지가 예상 패키지 ""와 일치하지 않습니다. (0) | 2023.01.29 |