我在春季开发了2种微服务:
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_HOME
和MODE_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)
我是新来的。
可能是什么问题?
您的代码调用登录服务 没有查询参数,仅使用基本URL:
http://localhost:8093/login-user
作为结果,将创建模型User
,但是未设置其字段email
和password
(均为null
都是。]
如果然后将User
对象传递给SQL查询,则各个参数也将评估为null
。
因此,在控制台日志上,生成的SQL也显示为null
,在该位置会出现一些有效值。
将所需的查询参数email
和password
传递给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);
http://localhost:8093/[email protected]&password=secret
的类似问题