我需要从Java程序调用RESTful webservice并将它传递给DateTime集合。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))
我明白问题是集合的序列化,但我不知道如何解决它。
更新 我也试图与Command类,所以像:
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);
但我得到相同的错误。
请帮忙吗?
感谢您的回答,但它仍然无法正常工作。 – Alessandro