Java 在使用另一个微服务时获取空响应?

Java 在使用另一个微服务时获取空响应?,java,mysql,spring,spring-mvc,spring-rest,Java,Mysql,Spring,Spring Mvc,Spring Rest,我在春季开发了2项微服务: 用户界面服务 一个登录服务,它还具有用于测试的UI html表单 UI服务正在使用登录服务 用户界面服务代码 登录服务代码 我在8093端口工作 @RequestMapping("/accounts/login") //login public String login(HttpServletRequest request) { request.setAttribute("mode", "MODE_LOGIN"); return "login"; }

我在春季开发了2项微服务:

用户界面服务 一个登录服务,它还具有用于测试的UI html表单 UI服务正在使用登录服务

用户界面服务代码 登录服务代码 我在8093端口工作

@RequestMapping("/accounts/login") //login 
public String login(HttpServletRequest request) {
    request.setAttribute("mode", "MODE_LOGIN");
    return "login";
}

@RequestMapping ("/login-user") // checking user details in database
public String loginUser(@ModelAttribute User user, HttpServletRequest request) {
    //ModelAndView model = new ModelAndView();
    if(userService.findByEmailAndPassword(user.getEmail(), user.getPassword())!=null) {
        return "index";
    }
    else {
        request.setAttribute("error", "Invalid username and password!");
        request.setAttribute("mode", "MODE_LOGIN");
        return "login";
    }
}
我在JSP页面中放置了以下属性MODE_HOME和MODE_LOGIN

同样的代码,若我使用登录服务及其UI进行测试,它工作正常,但在使用UI服务时,它接受空值。我可以使用该服务,但当使用相同的服务时,console.log中会显示以下值:

select user0_.id as id1_0_, user0_.`email` as email2_0_, user0_.`fname` as fname3_0_, 
user0_.`lname` as lname4_0_, user0_.`pwd` as pwd5_0_, user0_.`phone` as phone6_0_ from user 
user0_ where user0_.`email`=? and user0_.`pwd`=?
但使用restTemplate从另一个用户处使用登录服务时:

我是新来的

可能是什么问题?

问题 您的代码调用登录服务时不带查询参数,只使用一个基本URL:

http://localhost:8093/login-user
因此,将创建模型用户,但其字段email和password未设置,两者仍然为空

如果随后将用户对象传递给SQL查询,则相应的参数也将计算为null

因此,在控制台日志上,生成的SQL也显示为null,其中预期会有一些有效值

解决方案 将所需的查询参数电子邮件和密码传递给restTemplate.getForObject的调用

或者使用Spring的RestTemplate方法,将查询参数作为映射传递给getForObject:

Map参数Map=新HashMap; parameterMap.putemail,theEmail@domain.com; parameterMap.putpassword,secret; restTemplate.getForObjecturi、String.class、parameterMap; 或者使用Spring构建包含查询参数的完整URL,并按如下方式传递:

UriComponents UriComponents=UriComponentsBuilder.fromHttpUrluri .queryParamemail,theEmail@domain.com .queryParampassword,secret 建筑 restTemplate.getForObjecturiComponents.toUriString、String.class; 在这两种方法中,生成的HTTP GET将使用以下URL:

http://localhost:8093/login-user?email=theEmail@domain.com&password=secret
另见 类似的问题 类似的问题 Baeldung的Java Spring教程: Baeldung的Java Spring教程:
您的登录服务似乎希望请求中存在用户对象,但从UI服务调用登录服务时,您似乎没有发送任何用户信息。@Jordan如何发送?
http://localhost:8093/login-user
http://localhost:8093/login-user?email=theEmail@domain.com&password=secret