仅从Spring MVC 3 Controller返回字符串消息

use*_*567 86 java spring spring-mvc

任何人都可以告诉我如何从控制器返回字符串消息?

如果我只是从控制器方法返回一个字符串,那么spring mvc将其视为jsp视图名称.

Tom*_*icz 175

使用@ResponseBody以下命令在控制器中注释您的方法:

@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
    return "Response!";
}
Run Code Online (Sandbox Code Playgroud)

来自:15.3.2.6使用@ResponseBody注释映射响应主体:

@ResponseBody注释[...]可以放在一个方法,并且指示返回类型应当直接写入HTTP响应主体(而不是放置在一个模型,或解释为视图名称).

  • 为了更清楚,我会添加_produces ="text/plain_` @RequestMapping(value ="/ controller",method = GET,produce ="text/plain")` (23认同)

geo*_*and 43

借助于Spring 4,如果你的控制器与注释@RestController,而不是@Controller,你不需要@ResponseBody注释.

代码将是

@RestController
public class FooController {

   @RequestMapping(value="/controller", method=GET)
   public String foo() {
      return "Response!";
   }

}
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到Javadoc@RestController


dan*_*nik 18

虽然@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) { 
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但第一种方法更可取.如果要返回具有自定义内容类型的响应或返回二进制类型(文件等等),则可以使用此方法;


Sco*_*ott 5

对于那些稍后可能会发现此问题的人来说,这只是一个注释,但您不必拉入响应来更改内容类型.下面是一个示例:

@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);
}
Run Code Online (Sandbox Code Playgroud)