Spring MVC——支持多种返回格式

1.概述

由于业务需要,一个接口可能既需要返回json,又需要返回xml。在SpringMVC中这很容易实现。

2.实例

首先对我们需要返回的数据进行处理,加上@XmlRootElement注解,这样才会转换为xml。

@XmlRootElement
public class ReponseResult {
    //region 属性
    public List<User> getUser() {
        return user;
    }

    public void setUser(List<User> user) {
        this.user = user;
    }

    private List<User> user;

    public String getMessage() {
        return message;
    }

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

    private String message;


    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    private boolean success;
    //endregion


    public ReponseResult() {
    }

    public ReponseResult(List<User> _data, boolean _success, String _message) {
        this.user = _data;
        this.success = _success;
        this.message = _message;
    }
}

然后Controller中按照正常的方式写就ok了

@Controller
@RequestMapping("/test")
public class Test {

    @ResponseBody
    @RequestMapping(value = "/test1.do")
    public ReponseResult test() {
        ReponseResult reponseResult = new ReponseResult();
        reponseResult.setSuccess(true);
        reponseResult.setMessage("通用,成功");
        List<User> list = new LinkedList<User>();
        User m1 = new User();
        User m2 = new User();
        m1.setId("1");
        m1.setName("test1");
        m2.setId("2");
        m2.setName("test2");
        list.add(m1);
        list.add(m2);
        reponseResult.setUser(list);
        return reponseResult;
    }
}

3.测试

使用Postman根据进行测试,需要注意的是,如果想要返回指定的数据格式,需要设置header中的Accept属性。如果需要返回json,就设置application/json,如果需要返回XML,可以设置为application/xml.
这里写图片描述

这里写图片描述

4.produces and consumes

Spring MVC官方文档在介绍Request Mapping的部分,对两个参数设置做了介绍,一个是produces,一个是consumes
这里写图片描述

这里写图片描述
从官方文档介绍可知,设置consumes可以根据请求缩小请求映射Content-Type,设置produces可以您可以根据Accept请求标头和控制器方法生成的内容类型列表缩小请求映射。如果都不设置,默认是兼容所有的媒体类型。但是有一点需要注意的是请求header要设置Accept属性值,要不然,不会根据content-type返回对应的数据格式。自己刚开始的时候就因为不了解这个属性设置,结果试了好久都没成功。

6.the usage of produces and consumes

code:

@Controller
@RequestMapping("/test")
public class Test {

    @ResponseBody
    @RequestMapping(value = "/test1.do", produces = {"application/xml; charset=UTF-8","application/json; charset=UTF-8"},
            consumes = {"application/json; charset=UTF-8","application/xml; charset=UTF-8"})
    public ReponseResult test() {
        ReponseResult reponseResult = new ReponseResult();
        reponseResult.setSuccess(true);
        reponseResult.setMessage("通用,成功");
        List<User> list = new LinkedList<User>();
        User m1 = new User();
        User m2 = new User();
        m1.setId("1");
        m1.setName("test1");
        m2.setId("2");
        m2.setName("test2");
        list.add(m1);
        list.add(m2);
        reponseResult.setUser(list);
        return reponseResult;
    }
}

produces和consumes支持字符串数组,在此,我设置了只接受json和xml两种媒体类型。
如果不设置Accept,即使content-type设置了json,返回的数据也是xml,这个返回的数据和produces中的顺序有关。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值