2017-07-28 4 views
0

JavaプログラムからRESTful Webサービスを呼び出し、それをDateTime Collectionに渡す必要があります。Spring RestTemplate:java.util.Collectionをシリアライズする方法

だから、私のコードは次のようなものです:

RestTemplate restTemplate = new RestTemplate(); 
try { 
    String scheme = request.getScheme(); 
    String userInfo = request.getRemoteUser(); 
    String host = request.getLocalAddr(); 
    int port = request.getLocalPort(); 
    String path = "/myapp/common/myapi"; 

    MultiValueMap<String, Object> requestParams = new LinkedMultiValueMap<String, Object>(); 

    requestParams.add("aId", objA.getId()); 
    requestParams.add("bIb", objB.getId()); 

    for (DateTime date : dates) { 
     requestParams.add("dates", date); 
    } 

    URI apiUri = new URI(scheme, userInfo, host, port, path, null, null); 
    result = restTemplate.postForObject(apiUri.toString(), request, BigDecimal.class, 
      requestParams); 
} catch (URISyntaxException e) { 
    logger.error(e.getMessage()); 
} catch (DataAccessException e) { 
    logger.error(e.getMessage()); 
} 

そしてWebサービスの署名はのようなものです:

@RequestMapping(value = "myapi", method = RequestMethod.POST) 
public @ResponseBody BigDecimal myApi(
     @RequestParam("dates") final List<DateTime> dates, 
     @RequestParam("aId") final Integer aId, @RequestParam("bId") final Integer bId) { 

    [...] 

    return result; 

} 

しかし、私はエラーを取得する:

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: No serializer found for class java.util.Collections$3 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))

私がいることを理解します問題はコレクションのシリアライゼーションですが、解決方法はわかりません。

public class CalcolaGiorniResiduiCommand implements Serializable { 
    private List<DateTime> dates; 
    //[...] 
} 

コントローラを変更::

@RequestMapping(value = "myapi", method = RequestMethod.POST) 
public @ResponseBody BigDecimal myApi(
     @RequestParam("command") final MyCommand command) { 

そして最後に:

MyCommand command = MyCommand.build(1, 1, dates); //dates is a DateTime Collection 
restTemplate.postForObject(apiUri.toString(), request, BigDecimal.class, command); 

しかし、私 私もCommandクラスで試してみましたので、何かを更新しました

同じエラーが発生します。

お願いします。 documentationから

答えて

0

、要求パラメータを転記することが目的であるので、コマンドオブジェクトは、第二のパラメータの代わりに、オブジェクト要求として渡されなければなりません。

ので、コードがから変更する必要があります。

restTemplate.postForObject(apiUri.toString(), request, BigDecimal.class, command); 

へ:答えを

restTemplate.postForObject(apiUri.toString(), command, BigDecimal.class); 
0
I think you have to pass a list of dateTime object rather than adding it multiple time. Can you please try with the below snippet. 
List<DateTime> dates = new ArrayList<>(); 

for (DateTime date : dates) { 
     dates.add(date); 
    } 
requestParams.add("dates", dates); 
+0

おかげで、それはまだ動作しません。 – Alessandro

関連する問題