在实现微服务或整体应用程序时,最好为Rest模板接口的URI端点进行硬编码是第一参考点。
没有简单的方法可以做到这一点!
URI变量通常用于路径元素,查询字符串参数或在将应用程序与前端解耦时使用。理想情况下,您将找到一种更好的解决方案,以构造您的URI来访问各个端点上的数据。但是,在执行了两次端点命中之后,您可能会遇到一个有趣的错误,例如
org.springframework.web.client.ResourceAccessException: I/O error: http://localhost:8080%api%users
不管进行了哪些研究,URI包都可以很方便地与String Builder一起使用来查询API。有几种方法可以实现此目的:
StringBuilder builder = new StringBuilder("http://localhost:8080/api/users"); URI uri = URI.create(builder.toString()); List<Users> updatedUsers = restTemplate.getForObject(uri, List.class);
这将在Rest模板中返回有关GET请求的用户列表。如果您使用的是POST请求,则将参数附加到字符串生成器中,如下面的代码片段所示:
StringBuilder builder = new StringBuilder("http://localhost:8080/api/adduser"); builder.append("?username="); builder.append(URLEncoder.encode("[email protected]",StandardCharsets.UTF_8.toString())); builder.append("&password="); builder.append(URLEncoder.encode("P@$$word",StandardCharsets.UTF_8.toString())); builder.append("&phone="); builder.append(URLEncoder.encode("911",StandardCharsets.UTF_8.toString())); URI uri = URI.create(urlencoded); restTemplate.postForObject(uri, Users.class);
如果使用特殊字符,则可能要在特定字符集上使用URL编码器。在这种情况下,我们使用的是UTF_8。仅提交硬编码的URL或Rest模板的行为,这是一个巨大的问号。
或最简单的方法是只在POST查询的硬编码URI上提交一个对象。
@RequestMapping(value = "/addNewUser", method = RequestMethod.POST) 2 public ModelAndView processRequest(HttpServletRequest request, HttpSession session, @RequestParam("username")String username, @RequestParam("password")String password, @RequestParam("phone")String phone) { RestTemplate restTemplate = new RestTemplate(); Users user = new Users(); user.setUsername(username); user.setPassword(password); user.setPhone(phone); user.setEnabled(true); restTemplate.postForObject("http://localhost:8080/api/adduser", user, Users.class); StringBuilder builder = new StringBuilder("http://localhost:8080/api/users"); URI uri = URI.create(builder.toString()); List<Users> updatedUsers = restTemplate.getForObject(uri, List.class); session = request.getSession(false); ModelAndView model = new ModelAndView(); if(session != null){ model.setViewName("welcome"); model.addObject("users", updatedUsers); model.addObject("user", (Users)session.getAttribute("user")); model.addObject("sessiontracker", sessiontracker.getList()); model.addObject("sumValidSessions", sessiontracker.getSizeSessionList()); return model; } return new ModelAndView("login"); }
我正在使用的GUI示例添加了一个用户,并将其显示在用户表中。
因此,这完全取决于您所使用的Spring版本。如果您使用的是旧版的Spring,则UriComponentsBuilder不会在spring-web jar中包含。有关标准URI和编码的更多信息,请单击以下链接:Java URL Encoding。
UriComponentsBuilder
spring-web jar
使用Rest模板深入研究URI可能会变得非常复杂。尽管如此,我还是建议您将其用于整体应用程序,或者如果您想要围绕微服务数据的快速指标GUI。不要忽略Spring允许您开发两种Controller类型,一个标准的MVC Controller和一个Rest Controller,它们为您提供了公开API的功能。
尽管如此,在微服务环境中使用HTTP客户端进行URL上的B2B通信还是很有利的,这增加了围绕异常和响应代码的更多自定义。
原文链接:http://codingdict.com