如何实现“更新”SpringMVC,Thymeleaf和RestTemplate?

时间:2017-10-19 06:07:55

标签: rest spring-mvc spring-boot thymeleaf resttemplate

我构建了2个Spring Boot应用程序:一个是REST API,另一个是通过Rest Template和Thymeleaf使用API​​的REST客户端。客户端基本上实现了基本的CRUD功能并使用了API,到目前为止我只能使用CREATE,READ和DELETE工作客户端。 *我在使用 UPDATE 功能时遇到问题: 我已经在控制器上有update()方法,但不知道如何将它连接到视图模板,因此,例如,如果我向列表中的每个“User”对象添加一个Edit按钮,单击它应该带我到一个预先填充的表格,其中包含“用户”名称(参见screenshot)。

这是我的update()控制器代码:

@PutMapping("update")
public String update(@RequestParam Long id, User user ) {
    restClient.update(id, user);
    System.out.println("updated");
    return "redirect:/users";
}

我创建了RestClient类,使用Rest Template执行CRUD操作:

public class RestClient {

    public final String GET_ALL_URL = "http://localhost:8080/api/all";
    public final String POST_URL = "http://localhost:8080/api/user";
    private static final String DEL_N_PUT_URL = "http://localhost:8080/api/";

    private static RestTemplate restTemplate = new RestTemplate();

    //get all users
    public List<User> getAllUsers() {
        return Arrays.stream(restTemplate.getForObject(GET_ALL_URL, User[].class))
                    .collect(Collectors.toList());
    }

    //create user
    public User postUser(User user) {
        return restTemplate.postForObject(POST_URL, user, User.class);
    }

    //delete user
    public void delete(Long id){
        restTemplate.delete(DEL_N_PUT_URL+id);
    }

    //update user
    public User update(Long id, User user){
        return restTemplate.exchange(DEL_N_PUT_URL+id, HttpMethod.PUT,
                new HttpEntity<>(user), User.class, id).getBody();
    }
}

视图模板片段: (我已经有一个“新用户”表格正常工作)

<table class="u-full-width">
    <thead>
    <tr>
        <th>Id</th>
        <th>Name</th>
        <th>Delete</th>
    </tr>
    </thead>
    <tbody>
    <tr th:each="user : ${users}">
        <td th:text="${user.id}"></td>
        <td th:text="${user.name}"></td>
        <td>
            <form th:method="delete" th:action="@{/}">
                <input type="hidden" name="id" th:value="${user.id}"/>
                <button type="submit">Delete</button>
            </form>
        </td>
    </tr>
    </tbody>
</table>

client project GITHUB

1 个答案:

答案 0 :(得分:0)

您可以直接调用RestTemplate的PUT方法,如..

UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
    // Add query parameter
    .queryParam("id",id);

RestTemplate restTemplate = new RestTemplate();
restTemplate.put(builder.toUriString(), user);