@Controller和@RestController区别

@RestController实现方式:

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Controller

@ResponseBody

public @interface RestController {

/**

* The value may indicate a suggestion for a logical component name,

* to be turned into a Spring bean in case of an autodetected component.

* @return the suggested component name, if any

* @since 4.0.1

*/

String value() default "";

}

@Controller实现方式:

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Component

public @interface Controller {

/**

* The value may indicate a suggestion for a logical component name,

* to be turned into a Spring bean in case of an autodetected component.

* @return the suggested component name, if any

*/

String value() default "";

}

一目了然,@RestController的实现代码中多了一个@ResponseBody注解,那么来看@ResponseBody注解的含义:

作用: 

      该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:

      返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

那么就得出结果了.

例子:

如果使用@Controller来实现返回数据返回json,那么方法一般要加上:

@RequestMapping("/getDemoById.do")

@ResponseBody

public Map<String, Object> getUser(long id) {

Map<String, Object> map = new HashMap<String, Object>();

     do someting....

     return map;

}

如果使用@RestController实现返回数据返回json则不用加@ResponseBody注解


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章