@Controller:注解控制器,注解在类上。
@RestController:注解控制器,该控制器的方法自动包含@ResponseBody注解,注解到类上,主要用于无视图的数据交换。
@RequestMapping:注解映射请求到方法,注解到方法上。
@ResponseBody:注解到方法的返回值或方法上,表明返回的不是逻辑视图,而是数据,即不会被ViewResolver解析。
@PathVariable:接受路径参数,注解在方法的参数前。
示例:
1. 依赖
在springMVC学习–1中pom.xml的基础上,添加以下依赖:
<!-- 对json和xml的支持 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.5.3</version>
</dependency>
该组件包括了对json和xml格式的支持,如果仅需要json格式支持,使用如下依赖:
<!-- 对json和xml的支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
2. 控制器
该控制器中演示了映射路径,接受参数、路径参数、接受参数到对象(jackson支持),以及多路径映射方法的使用。
首先创建一个类,jackson可将该类实例化的对象与json或xml之间进行转换。
package com.object;
/**此类用于演示获取request的参数,和返回对象到response。
* @author apple
*
*/
public class DemoObj {
private Long id;
private String name;
public DemoObj() { //jackson对对象和json进行转换必须用到此空的构造函数
super();
}
public DemoObj(Long id, String name) {
this.id = id;
this.name = name;
}
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
控制器:
package com.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.object.DemoObj;
@Controller
@RequestMapping("/anno") // path mapping to this class is "/anno"
public class DemoAnnoController {
@RequestMapping(produces="text/plain;charset=UTF-8")
public @ResponseBody String index(HttpServletRequest request) {
return "url: " + request.getRequestURL() + " can access";
}
/** 演示接受路径参数
* @param str
* @param request
* @return
*/
@RequestMapping(value="/pathvar/{str}", produces=
"text/plain;charset=UTF-8")
public @ResponseBody String demoPathVar(@PathVariable String str,
HttpServletRequest request) {
return "url: " + request.getRequestURL() + " can access, str: " + str;
}
/** 演示获取参数
* @param id
* @param request
* @return
*/
@RequestMapping(value="/requestParam", produces=
"text/plain;charset=UTF-8")
public @ResponseBody String passRequestParam(Long id,
HttpServletRequest request) {
return "url: " + request.getRequestURL() + " can access, id: " + id;
}
/** 演示解释接受参数到对象
* @param obj
* @param request
* @return
*/
@RequestMapping(value="/obj", produces=
"application/json;charset=UTF-8")
@ResponseBody
public String passObject(DemoObj obj, HttpServletRequest request) {
return "url: " + request.getRequestURL()
+ " can access, obj id: " + obj.getId() + " obj name: " + obj.getName();
}
/** 演示映射不同路径到相同方法
* @param request
* @return
*/
@RequestMapping(value={"/name1", "/name2"}, produces=
"text/plain;charset=UTF-8")
@ResponseBody
public String remove(HttpServletRequest request) {
return "url: " + request.getRequestURL() + " can access";
}
}
3. RestController
package com.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.object.DemoObj;
/**演示RestController注解的控制器,该注解包含@ResponseBody,
* 因此无需再在方法上再注解@ResponseBody
* @author apple
*
*/
@RestController
@RequestMapping(value = "/rest")
public class DemoRestController {
/**演示用jackson将对象转换成json
* @param obj
* @return
*/
@RequestMapping(value = "/getjson", produces = "application/json;charset=UTF-8")
public DemoObj getjson(DemoObj obj) {
return new DemoObj(obj.getId() + 1, obj.getName() + "yy");
}
/**演示用jackson将对象转换成xml
* @param obj
* @return
*/
@RequestMapping(value = "/getxml", produces = "application/xml;charset=UTF-8")
public DemoObj getxml(DemoObj obj) {
return new DemoObj(obj.getId() + 1, obj.getName() + "yy");
}
}