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

问题描述 投票:0回答:1

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

  • a UI服务
  • 一个Login-service,它也具有用于测试的UI(html形式)

UI服务正在使用登录服务

UI服务(代码)

@RequestMapping("/log")
public String abc(HttpServletRequest request) {
    final String uri = "http://localhost:8093/accounts/login";

    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.getForObject(uri, String.class);

    return result;
    //request.setAttribute("mode", "MODE_LOGIN");
}


@RequestMapping("/login-user")
private String getEmployees1(HttpServletRequest request) {
    final String uri = "http://localhost:8093/login-user";
    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.getForObject(uri, String.class);

    return result;
}

登录服务(代码)

我正在端口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_HOMEMODE_LOGIN

如果使用UI的Login Service进行测试,则使用相同的代码,它可以正常工作,但是从UI服务使用时,它的取值为null。我可以使用该服务,但使用相同服务时控制台(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从另一个人使用Login-service时:

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` is null) and (user0_.`pwd` is null)

我是新来的。

可能是什么问题?

java mysql spring spring-mvc spring-rest
1个回答
0
投票

问题

您的代码调用登录服务 没有查询参数,仅使用基本URL:

http://localhost:8093/login-user

作为结果,将创建模型User,但是未设置其字段emailpassword(均为null都是。]

如果然后将User对象传递给SQL查询,则各个参数也将评估为null

因此,在控制台日志上,生成的SQL也显示为null,在该位置会出现一些有效值。

解决方案

将所需的查询参数emailpassword传递给restTemplate.getObject的调用。

或者通过使用Spring的RestTemplate的方法getForObject(String url, Class<T> responseType, Map<String,?> uriVariables)通过将查询参数作为映射传递:

getForObject(String url, Class<T> responseType, Map<String,?> uriVariables)

或使用Spring的Map<String, Object> parameterMap = new HashMap<>(); parameterMap.put("email", "[email protected]"); parameterMap.put("password", "secret"); restTemplate.getForObject(uri, String.class, parameterMap); 构建完整的URL(包括查询参数)并像这样传递它:

UriComponentsBuilder

在两种方法中,最终的HTTP GET将使用以下URL:

UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(uri)
  .queryParam("email","[email protected]")
  .queryParam("password","secret")
  .build();

restTemplate.getForObject(uriComponents.toUriString(), String.class);

另请参见

© www.soinside.com 2019 - 2024. All rights reserved.