看标题,今天要用Spring mvc完成两个内容
- 返回Jackson数据
- 对控制器进行异常处理
如何去做?
先对我们的spring mvc 配置文件进行配置。
添加如下配置:
<!-- 配置spring mvc 使用注解,以及使用jackson转换器-->
<mvc:annotation-driven >
<mvc:message-converters>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
需要使用的jar包是:
- jackson-core-asl-1.9.13.jar
- jackson-mapper-asl-1.9.13.jar
返回json数据
控制器代码:
package com.ysdit.mvc3.ctrl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ysdit.mvc3.entity.Emp;
@Controller
public class JSONController extends BaseController {
@RequestMapping("/json1")
public @ResponseBody List<Emp> json1(){
List<Emp> list = new ArrayList<Emp>();
list.add(new Emp(1000, "Tom"));
list.add(new Emp(1001, "汤姆"));
return list;
}
@RequestMapping("/json2")
public @ResponseBody Emp json2(){
return new Emp(1001, "汤姆");
}
@RequestMapping("/json3")
public @ResponseBody Map<String, Object> json3(){
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("1001", new Emp(1001, "汤姆"));
map.put("message", "操作成功");
map.put("labels", new String []{"JAVA","ORACLE","SPRING"});
return map;
}
@RequestMapping("/test")
public String test(Integer age){
if(age < 18){
throw new RuntimeException("运行某个业务方法出错。");
}
return "index";
}
}
实体类代码
package com.ysdit.mvc3.entity;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
public class Emp {
private Integer empno;
private String ename;
@DateTimeFormat(pattern="yyyy/MM/dd")
private Date hiredate;
public Emp(Integer empno, String ename) {
super();
this.empno = empno;
this.ename = ename;
}
public Emp() {
super();
}
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
}
实现的效果如图所示:
如何去处理异常?
原理:自定义一个异常,控制器使用@ExceptionHandler注解去完成这个异常
一个基本控制器的类:
package com.ysdit.mvc3.ctrl;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ExceptionHandler;
import com.ysdit.mvc3.exception.BalanceException;
public class BaseController {
private String abc;
public BaseController() {
super();
}
/**
*这个异常能处理Exception和BalanceException异常,
当程序出现错误时就会回调这个异常的方法
*/
@ExceptionHandler(value = {Exception.class, BalanceException.class })
public String handleEx(Exception e, HttpServletRequest request) {
request.setAttribute("e", e);
abc = null;
return "error";
}
}
自定义的异常类BalanceException
package com.ysdit.mvc3.exception;
public class BalanceException extends RuntimeException{
}
实现业务的类
package com.ysdit.mvc3.ctrl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ysdit.mvc3.entity.Emp;
@Controller
public class JSONController extends BaseController {
@RequestMapping("/test")
public String test(Integer age){
if(age < 18){
throw new RuntimeException("运行某个业务方法出错。");
}
return "index";
}
}
当我们使用http://localhost:8080/mvc3/test?age=11测试的时候
就会报错:运行某个业务方法出错。
此时表明我们已经实现了spring mvc 的异常处理。
对本文如有疑问,请留言交流。