Spring mvc之返回jackson和异常处理

看标题,今天要用Spring mvc完成两个内容

  1. 返回Jackson数据
  2. 对控制器进行异常处理

如何去做?

先对我们的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;
    }



}

访问路径:http://localhost:8080/mvc3/json1

实现的效果如图所示:
这里写图片描述


如何去处理异常?

原理:自定义一个异常,控制器使用@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 的异常处理。

对本文如有疑问,请留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一缕阳光直射你的心扉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值