使用TestRestController调用@PatchMapping带注释的方法

时间:2018-12-23 18:17:04

标签: spring request-mapping

我有一个用@PatchMapping注释的方法。

@PatchMapping(path= "/api/transaction/{transaction-id}/return")
public ResponseEntity<Transaction> returnBookTransaction(@PathVariable(name="transaction-id") Long transactionId){
    Transaction transaction = transactionRepository.findById(transactionId).get();
    transaction.setDateOfReturn(LocalDateTime.now());
    return ResponseEntity.ok().body(transaction);
}

我需要测试此方法。在测试方法中,我需要使用TestRestController.patchForObject();

@Test
public void testReturnBookTransaction() throws Exception {

    ResponseEntity<Transaction> response = testRestTemplate.patchForObject("/api/transaction/{transaction-id}/return", 
            , Transaction.class, 1);

    Assert.assertEquals(200, response.getStatusCode().value());

}  

上面的代码显示template.patchForObject()中的编译器错误,因为它需要4个参数。我不知道第4个参数要传递什么。

我只需要为{transaction-id},URL String和返回类型类传递1,我已经通过了。但是此方法还需要另外一个参数Object

我不知道要在Object中传递什么。

1 个答案:

答案 0 :(得分:0)

来自Spring's documentation

  

public T patchForObject(字符串url,                               对象请求                               类responseType,                               地图uriVariables )                        抛出RestClientException

第二个参数用于请求对象。由于您的控制器方法中没有任何与请求相关的信息,因此可以将其设置为null。

尝试以下操作:

exec gosu ${app_user} "$@"

更新:

如果您想访问响应实体,请尝试以下操作:

Transaction response = testRestTemplate.patchForObject("/api/transaction/{transaction-id}/return", null 
        , Transaction.class, 1);