AndroidAnnotations RestService Post Image

时间:2014-04-13 01:46:25

标签: android android-annotations

我尝试上传图片以及有关图片的其他数据,但没有运气。我尝试了很多变化,但总是以java.lang.ClassCastException: org.springframework.core.io.FileSystemResource cannot be cast to java.lang.String结束。如何使用AndroidAnnotations / Android Spring将图像发布到我的服务器?

@Rest(rootUrl = "http://api.me.com/v1", converters = FormHttpMessageConverter.class)
public interface CheckInService {
    @Post("/stuff/{id}/schedule")
    void checkIn(String id, MultiValueMap schedule);
}

致电代码:

    MultiValueMap<String, Object> values = new org.springframework.util.LinkedMultiValueMap<String,Object>();
    values.add("image", new FileSystemResource(_selectedImageUri.getPath()));
    values.add("departure", schedule.departure.getTime());
    values.add("arrival", schedule.arrival.getTime());
    values.add("location[latitude]", schedule.location.latitude);
    values.add("location[longitude]", schedule.location.longitude);
    _checkInService.checkIn(id, values);

2 个答案:

答案 0 :(得分:0)

FormHttpMessageConverter处理Resources个子类(如FileSystemResource)。您的MultiValueMapObject定义为值类型。所以,这应该有效。

然后有两件事:

  • 您是否调整过FormHttpMessageConverter
  • 的配置?
  • 你能给我们一整堆吗?

答案 1 :(得分:0)

进入这个问题,通过在Rest接口中显式定义MultiValueMap的泛型类型来修复它

@Rest(rootUrl = "http://api.me.com/v1", converters = {FormHttpMessageConverter.class
  StringHttpMessageConverter.class, ByteArrayHttpMessageConverter.class})
public interface CheckInService {
   @Post("/stuff/{id}/schedule")
   void checkIn(String id, MultiValueMap<String, Object> schedule);
}

还要确保包含任何其他适当的转换器。您将需要FileResource的ByteArrayHttpMessageConverter.class和至少StringHttpMessageConverter.class将额外信息转换为字符串。