Answers:
使用@ResponseBody
以下命令在控制器中注释方法:
@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
return "Response!";
}
来自:15.3.2.6将响应主体与@ResponseBody
注释映射:
可以将
@ResponseBody
注释放在方法上,并指出返回类型应直接写到HTTP响应主体(而不是放置在模型中,或解释为视图名称)。
在Spring 4中,如果您的Controller用@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);
}
@RequestMapping(value="/controller", method=GET, produces="text/plain")