鱼C论坛

 找回密码
 立即注册
查看: 472|回复: 5

[已解决]工程正常运行 正确的数据被正确的写入数据库 可是返回信息总是出错

[复制链接]
发表于 2024-1-12 17:33:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
工程正常运行 正确的数据被正确的写入数据库 可是返回信息总是出错

运行工程一切正常
使用postman 发生注册请求 用户名和用户请求被正常写入数据库
但是postman的返回信息如下
{"code":null,"message":null,"data":null}

正常情况下 如果成功注册的话 返回信息应该是
{"code":0,"message":操作成功,"data":null}

如果操作不成功的话 返回信息应该是
{"code":1,"message":用户名已被占用,"data":null}
或者
{"code":1,"message":参数不合法,"data":null}


我的reslut 类代码如下
package com.itheima.big_evnet.pojo;



public class Result<T> {
    private Integer code;//业务状态码  0-成功  1-失败
    private String message;//提示信息
    private T data;//响应数据
   
   
   
   
   
    public Integer getCode() {
                return code;
        }

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

        public String getMessage() {
                return message;
        }

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

        public T getData() {
                return data;
        }

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

        public Result() {
           
    }
   
    public Result(Integer code, String message, T data) {
                // TODO Auto-generated constructor stub
        }

       
    public static <E> Result<E> success(E data) {
        return new Result<> (0, "操作成功", null);
    }

    public static Result success() {
        return new Result(0, "操作成功", null);
    }

    public static Result error(String message) {
        return new Result(1, message, null);
    }
}

UserController类代码如下
package com.itheima.big_evnet.controller;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;

import com.itheima.big_evnet.pojo.Result;
import com.itheima.big_evnet.pojo.User;
import com.itheima.big_evnet.service.UserService;

@Mapper
@RestController
@RequestMapping("user")
public class UserController {
       
        @Autowired
        private UserService userService;
       
        @PostMapping("/register")
        public Result register(String username, String password) {
               
                if(username!=null && username.length()>=5 && username.length()<=16 && password!=null && password.length()>=5 && password.length()<=16) {

                        User u = userService.findByUserName(username);
                        if (u==null) {
                                userService.register(username, password);
                                return Result.success();
                        }else {
                                return Result.error("用户名已被占用");
                        }
                }else {
                        return Result.error("参数不合法");
                }
               
       
        }
       
}

请问我的代码有问题吗? 为什么无法实现我的要求的功能
最佳答案
2024-1-12 17:33:50
你在Result类的构造函数中没有给code、message和data赋值,导致返回的结果中这些字段都是空的。你可以修改一下Result类的构造函数,给这些字段赋上相应的值:
public Result(Integer code, String message, T data) {
    this.code = code;
    this.message = message;
    this.data = data;
}

另外,在UserController类的register方法中,你只对username长度进行了判断,但没有对其他条件进行判断。你可以使用if-else语句来判断不同条件下的返回结果:
@PostMapping("/register")
public Result register(String username, String password) {
    if (username != null && username.length() >= 5 && password != null && password.length() >= 5) {
        // 注册成功逻辑
        // ...
        return Result.success(); // 返回操作成功的结果
    } else if (username != null && username.length() < 5) {
        return Result.error("用户名长度不能小于5"); // 返回用户名长度不合法的结果
    } else if (password != null && password.length() < 5) {
        return Result.error("密码长度不能小于5"); // 返回密码长度不合法的结果
    } else {
        return Result.error("参数不合法"); // 返回其他参数不合法的结果
    }
}

这样,当注册成功时返回
{"code":0,"message":操作成功,"data":null}
,当用户名长度不合法时返回
{"code":1,"message":用户名长度不能小于5,"data":null}
,当密码长度不合法时返回
{"code":1,"message":密码长度不能小于5,"data":null}
,当其他参数不合法时返回
{"code":1,"message":参数不合法,"data":null}


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-12 17:33:50 | 显示全部楼层    本楼为最佳答案   
你在Result类的构造函数中没有给code、message和data赋值,导致返回的结果中这些字段都是空的。你可以修改一下Result类的构造函数,给这些字段赋上相应的值:
public Result(Integer code, String message, T data) {
    this.code = code;
    this.message = message;
    this.data = data;
}

另外,在UserController类的register方法中,你只对username长度进行了判断,但没有对其他条件进行判断。你可以使用if-else语句来判断不同条件下的返回结果:
@PostMapping("/register")
public Result register(String username, String password) {
    if (username != null && username.length() >= 5 && password != null && password.length() >= 5) {
        // 注册成功逻辑
        // ...
        return Result.success(); // 返回操作成功的结果
    } else if (username != null && username.length() < 5) {
        return Result.error("用户名长度不能小于5"); // 返回用户名长度不合法的结果
    } else if (password != null && password.length() < 5) {
        return Result.error("密码长度不能小于5"); // 返回密码长度不合法的结果
    } else {
        return Result.error("参数不合法"); // 返回其他参数不合法的结果
    }
}

这样,当注册成功时返回
{"code":0,"message":操作成功,"data":null}
,当用户名长度不合法时返回
{"code":1,"message":用户名长度不能小于5,"data":null}
,当密码长度不合法时返回
{"code":1,"message":密码长度不能小于5,"data":null}
,当其他参数不合法时返回
{"code":1,"message":参数不合法,"data":null}


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-12 23:26:51 | 显示全部楼层
FishC 发表于 2024-1-12 17:33
你在Result类的构造函数中没有给code、message和data赋值,导致返回的结果中这些字段都是空的。你可以修改 ...


在以下目录下/big-evnet/src/test/java/com/itheima/big_event/JwtTest.java

有如下代码
package com.itheima.big_event;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import org.junit.jupiter.api.Test;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;



public class JwtTest {
       
        @Test
        public void testGen() {
                Map<String,Object> claims = new HasMap<>();  //这个位置出现报错  提示 HasMap cannot be resolved to a type
                claims.put("id", 1);
                claims.put("username", "张三");
               
                String token = JWT.create()
                        .withClaim("user", claims)
                        .withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60*12))
                        .sign(Algorithm.HMAC256("itheima"));
        }

}

eclipse 提示 HasMap cannot be resolved to a type 请问是什么问题 要怎么解决呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-12 23:27:00 | 显示全部楼层
mumei2018 发表于 2024-01-12 23:26
在以下目录下/big-evnet/src/test/java/com/itheima/b ...


你在代码中使用了一个不存在的类型HasMap,导致报错。正确的类型应该是HashMap。请将下面这行代码中的HasMap修改为HashMap:Map<String, Object> claims = new HashMap<>();这样就可以解决这个问题了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-13 00:48:03 | 显示全部楼层
FishC 发表于 2024-1-12 23:27
你在代码中使用了一个不存在的类型HasMap,导致报错。正确的类型应该是HashMap。请将下面这行代码中的H ...

你好 我运行工程后 出错 出现以下提示

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2024-01-13T00:46:29.529+08:00 ERROR 10096 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   :

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
        If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
        If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

请问 是什么问题 该怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-13 00:48:13 | 显示全部楼层
mumei2018 发表于 2024-01-13 00:48
你好 我运行工程后 出错 出现以下提示

Error star ...


这个错误提示表明你没有正确配置数据源(DataSource)。根据错误信息,你可以考虑以下几点来解决问题:

1. 检查你的项目中是否有正确配置数据源的相关配置文件(如application.properties或application.yml)。其中,必须指定数据库的URL属性。确保URL属性已经正确配置。

2. 如果你需要使用嵌入式数据库(如H2、HSQL或Derby),请确保将相应的数据库依赖项添加到项目的类路径中。这可以通过在pom.xml文件(如果是Maven项目)中添加相应的依赖项来实现。

3. 如果你有特定环境的数据库配置,你可能需要激活相应的配置文件。请检查是否有适当的配置文件激活的问题。

综上所述,请检查你的数据库配置文件,确保正确配置了数据源的URL属性,并添加相应的数据库依赖项到项目的类路径中。如果仍然存在问题,请提供更多相关代码和配置文件的信息以便我们更好地帮助你解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表