@RestController 和 @Controller 的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nimoyaoww/article/details/82999057

@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

理解下面的注解哦。

@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

撸代码:

//@RestController
@Controller
@RequestMapping("falarmUser")
public class FAlarmUserController {

    private static final Logger logger = LoggerFactory.getLogger(FAlarmUserController.class);

    @Autowired
    private FAlarmUserService fAlarmUserService;

    /**
     * 添加用户
     * @param userEntity
     * @return
     */
    @PostMapping("addUser")
    public Object addUser(@RequestBody FAlarmUserEntity userEntity){
        logger.info("添加成员的信息 : "+userEntity.toString());
        Response res = new Response();
        res = fAlarmUserService.addUser(userEntity);
        return res;
    }

}

Response 类:

@JsonInclude(value = JsonInclude.Include.NON_EMPTY)
public class Response implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer code;

    private Object data;

    private String message;

    public Response() {
        super();
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

如果是用@RestController ,请求之后返回的结果如下。

如果使用 @Controller,返回结果 如下;

@Controller 注解不能将结果写入到  HTTP response body 中,因而无法正常显示。

猜你喜欢

转载自blog.csdn.net/nimoyaoww/article/details/82999057