Spring MVC - 响应正文时的结果类型

本文介绍了在Spring MVC中如何返回JSON响应,包括添加Jackson依赖、定义通用JSON响应格式、使用JsonResult类以及优化状态码表示。通过示例展示了UserController如何利用JsonResult返回成功的数据或错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建议向客户端响应JSON格式的字符串,添加jackson-databind依赖项

  <dependencies>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.3</version>
    </dependency>

使用通用的JSON响应格式

JsonResult类

public class JsonResult<T> {

    private Integer state;
    private String message;
    private T data;

    Getter and Setter
}

UserController类

@GetMapping ("/{id:[0-9]+}/info.do")
    public JsonResult<UserVO> info(@PathVariable Long id){
        System.out.println("即将查询id = " + id + "的用户的信息...");
        UserVO userVO = new UserVO();
        userVO.setUsername("s1");
        userVO.setPassword("111111");
        userVO.setEmail("s1@qq.com");
        JsonResult<UserVO> jsonResult = new JsonResult<>();
        jsonResult.setState(20000);
        jsonResult.setData(userVO);
        return jsonResult;
    }

定义枚举表示服务器端响应的状态值

JsonResult类

public enum State{
        OK(2000),
        ERR_USERNAME(40400),
        ERR_PASSWORD(40600);

        Integer value;

        State(Integer value){
            this.value = value;
        }

        public Integer getValue(){
            return value;
        }
    }

UserController类

@RequestMapping("/reg.do")
    public JsonResult<Void> reg(UserRegDTO userRegDTO){
        System.out.println(userRegDTO);
        JsonResult<Void> jsonResult = new JsonResult();
        jsonResult.setState(JsonResult.State.OK.getValue());
        return jsonResult;
    }

优化JsonResult类

JsonResult类新增成功方法和失败方法。

    public static JsonResult<Void> ok(){
        return ok();
    }

    public static <T> JsonResult<T> ok(T data){
        JsonResult<T> jsonResult = new JsonResult<>();
        jsonResult.state = State.OK.getValue();
        jsonResult.data = data;
        return jsonResult;
    }

    public static JsonResult<Void> fail(State state,String message){
        JsonResult<Void> jsonResult = new JsonResult<>();
        jsonResult.state = state.getValue();
        jsonResult.message = message;
        return jsonResult;
    }

UserController类

    @RequestMapping("/login.do")
    public JsonResult<Void> login(String username, String password){
        System.out.println("username = " + username + ", password = " + password);
        if ("admin".equals(username)){
            if ("111111".equals(password)){
                return JsonResult.ok();
            }else {
                String message = "登录失败,密码错误!";
                return JsonResult.fail(ERR_PASSWORD,message);
            }
        }else {
            String message = "登录失败,用户名不存在!";
            return JsonResult.fail(ERR_USERNAME,message);
        }
    }    

    @RequestMapping("/reg.do")
    public JsonResult<Void> reg(UserRegDTO userRegDTO){
        System.out.println(userRegDTO);
        return JsonResult.ok();
    }

    @GetMapping ("/{id:[0-9]+}/info.do")
    public JsonResult<UserVO> info(@PathVariable Long id){
        System.out.println("即将查询id = " + id + "的用户的信息...");
        UserVO userVO = new UserVO();
        userVO.setUsername("s1");
        userVO.setPassword("111111");
        userVO.setEmail("s1@qq.com");
        return JsonResult.ok(userVO);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

马里亚纳景川

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

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

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

打赏作者

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

抵扣说明:

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

余额充值