spring web(SpringBoot,SpringMVC)项目中返回自定义格式的JSON,不暴露不必要的字段

笔者的web项目中使用RESTFul规范和前台进行交互。

原始代码

返回的json数据格式如下:

对应的后台实体类及交互方法:

JsonResult.java

public class JsonResult {

    private int code;
    private String message;
    private String nextUrl;
    private Object data;

    public JsonResult(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public JsonResult(int code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public JsonResult(int code, String message, String nextUrl) {
        this.code = code;
        this.message = message;
        this.nextUrl = nextUrl;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

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

    public String getNextUrl() {
        return nextUrl;
    }

    public void setNextUrl(String nextUrl) {
        this.nextUrl = nextUrl;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

controller代码:

@PostMapping(value = "offline")
@ResponseBody
public JsonResult offline() {
    if(xxxxx)
    return errorResult("appid无效");

    if(yyy){

     ImmutableMap<String, Object> result = ImmutableMap.of("uuid", conversionId, "code", 200);
     return successResult("转换成功", result);
     }
}

protected JsonResult successResult(String message, String nextUrl) {
    return new JsonResult(200, message, nextUrl);
}

protected JsonResult successResult(String message, Object data) {
    return new JsonResult(200, message, data);
}
protected JsonResult errorResult(String message) {
    return new JsonResult(300, message);
}

以上返回的json格式在web交互的时候已经很精简了,而且封装的很不错

笔者最近需要对特定的web接口进行封装,封装成计费的API,这个时候上面格式里面的json节点显得多余

"data":
{
    "code":200,
    "uuid":"xxxxx"
}

于是笔者想到了Spring里面的ResponseEntity类

重构代码

@PostMapping(value = "offline")
@ResponseBody
public ResponseEntity<Map<String,Object>> offline(){

    if(StringUtils.isEmpty(apiKey)||StringUtils.isEmpty(apiKey))
    {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ImmutableMap.of("message","apiKey和appId不能为空","code",300));
    }

    return ResponseEntity.ok().body(ImmutableMap.of("message","转换成功","code",200,"uuid",conversionId));
}

代码简洁了很多,返回的json如下

建议

不建议将http状态码作为业务系统代码,比如上面的200,300,很容易让新手产生疑问,把排除问题故障的思路带偏了。当然按笔者的理解,设计上面JsonResult类的作者应该是出于

对简单业务的类型比较简单的交互设计了200,300两个状态,一般业务系统都会有自己的业务状态码,比如银行。而且多用ASCII字符集的可视字符组成业务系统故障码,这样做的好处:

不管在沈编码环境,这个业务故障代码都能正常显示。

原文地址:https://www.cnblogs.com/passedbylove/p/12299146.html

时间: 2024-11-10 20:52:45

spring web(SpringBoot,SpringMVC)项目中返回自定义格式的JSON,不暴露不必要的字段的相关文章

项目记录:spring+springmvc 项目中 @Transactional 失效的解决方法

第一步,修改spring的配置文件和springmvc的配置文件 --------------------------------applicationContext.xml <context:annotation-config/>  <context:component-scan base-package="com.xxx"> <context:exclude-filter type="annotation" expression=&

SpringMVC项目中web.xml中的节点加载顺序问题

SpringMVC项目中web.xml中的节点加载顺序问题,之前以为web.xml中就是一些配置信息,和节点的顺序没有关系,后来才发现初始化时的加载顺序是和节点的顺序相关的. 完整的web.xml文件内容: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=&quo

SpringMvc项目中使用GoogleKaptcha 生成验证码

SpringMvc项目中使用GoogleKaptcha 生成验证码 前言:google captcha 是google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比. 1.jar包准备 官方提供的pom应该是 <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</arti

SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;

情况一: ajax中传值时是乱码(后台可以获取到中文字符,但用@ResponseBody返回时前台为乱码) 情况二: Controller 中 request.getParameter()获取到的是乱码 @RequestMapping(params = "method=submit") public String submit(HttpServletRequest request, ModelMap modelMap) throws Exception{ String uname =

Asp.net mvc web api 在项目中的实际应用

Asp.net mvc web api 在项目中的实际应用 前言:以下只是记录本人在项目中的应用,而web api在数据传输方面有多种实现方式,具体可根据实际情况而定! 1:数据传输前的加密,以下用到 微软自带的 Rijndael 类(关于Rijndael 的更多信息请参见MSDN),32位密钥加16对称算法初始化向量,代码如下: //简单定义一个实体类: public class User { public int Id { get; set; } public string Name { g

style.css项目中的自定义款式用来覆盖Bootstrap中的一些默认设置

这里有两个关键点,其间"bootstrap.cssBootstrap中的根本款式文件,只需运用Bootstrap就必需调用这个文件.而 bootstrap-responsive.css则能够依据你喜好来挑选,假如想让项目具有呼应式规划的作用,就必需求调用这个款式文件,并且调用必需遵从先后顺序,bootstrap-responsive.css必需放置在bootstrap.css以后,不然便不具有呼应式规划功用.而最终的style.css项目中的自定义款式,用来覆盖Bootstrap中的一些默认设置

SPring+Structs2实现的项目中进行Spring AOP时的相关小记

 SPring+Structs2实现的项目中进行Spring AOP时的相关小记 1.一般为了方便开发Structs2的项目中的action都会建立一个BaseAction如果继承了BaseAction中的子类进行AOP时,只能指定AOP中的PointCut为BaseAction 如果对应的BaseAction如果继承于ActionSupport的话,就只能定义AOP中的PointCut为ActionSupport了 因为Spring生成的代理类中,对同名的方法,只有一个,即子类重写父类的方

SpringBoot Mybatis项目中的多数据源支持

1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 2.建数据源 首先,我们建两个测试库 test1 test2,分别建两个表,分别添加一些测试数据 CREATE TABLE `groupidinfo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `groupId` varchar(255) DEFAULT NULL, `versio

[WEB API] CLIENT 指定请求及回应格式(XML/JSON)

[Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-and-model-binding 本篇则要演练xml/json 回应 Get 定义 Header:Content-Type 定义 QueryString 请求 Post POST json 数据 POST xml 数据 回应 Get 定义 Header:Content-Type 测试工具:本来想用 p