前言:
刚开始学习SpringMVC的时候,对于一些使用到的注解我们常常会有很多疑惑,今天来讲一下@ResponseBody这个注解
一、@ResponseBody的作用:
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象,通常我们使用用来返回JSON数据或者是XML数据,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
来看具体的使用吧:
后台controller:
@ResponseBody
@RequestMapping(value = "/test")
public User sayHello(String username, String password, User user){
System.out.println("username"+username+" and password:"+password);
System.out.println("username:"+user.getUsername()+" | password:"+user.getPassword());
return user;
}
前端页面:我这里使用的是ajax提交,指定dataType为json,接收到后台传来的数据会转为json对象
<div class="container">
<form class="form-signin">
<h2 class="form-signin-heading">Please sign in</h2>
<label for="inputEmail" class="sr-only">Username</label>
<input type="text" id="username" name="username" class="form-control" placeholder="Username" required autofocus>
<br>
<label for="inputPassword" class="sr-only">Password</label>
<input type="text" id="password" name="password" class="form-control" placeholder="Password" required>
<br>
</form>
<button class="btn btn-lg btn-primary btn-block" onclick="submitForm();">提交</button>
</div>
<script type="text/javascript">
function submitForm() {
var username = $("#username").val();
var password = $("#password").val();
console.log(username);
$.ajax({
url: "/test/test",
type: "post",
data: {
"username": username,
"password": password
},
dataType:"json",
success: function (data) {
console.log(data);
console.log(typeof data);
alert(data.username);
}
})
}
</script>
结果如下:
二、response.getWriter().write():
此时我们重新写一个后台controller:
@RequestMapping(value = "/test2")
public void sayHello2(HttpServletResponse response,User user) throws IOException {
response.getWriter().write(JSONObject.toJSON(user).toString());
}
再来看看结果:
两种方式作用都是相同的,希望可以帮到大家!