【问题标题】:POST not possible because instantiation of standard serializer (Jackson) failsPOST 不可能,因为标准序列化程序 (Jackson) 的实例化失败
【发布时间】:2014-11-30 23:24:31
【问题描述】:

我正在尝试将数据从我的客户端发布到休息网络服务器。 我的客户使用 Spring 的 Android 版 Resttemplate。

请求对象有效,但发布它们会出现以下错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.erdi.mobilefinalneu/com.example.erdi.mobilefinalneu.UploadActivity}: java.lang.IllegalStateException: Failed to instantiate standard serializer (of type com.fasterxml.jackson.databind.ser.std.NullSerializer): access to constructor not allowed

Caused by: java.lang.IllegalStateException: Failed to instantiate standard serializer (of type com.fasterxml.jackson.databind.ser.std.NullSerializer): access to constructor not allowed

相关代码为:

    restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
    //restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
    StrictMode.ThreadPolicy policy = new
            StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);

    HttpEntity<RecordingModel> entity = new HttpEntity<RecordingModel>(recordingToPost,headers);

    restTemplate.put(url + "sportsupload/", entity);
    //ResponseEntity<RecordingModel> out = restTemplate.exchange(url + "sportsupload/", HttpMethod.POST, entity
    //        , RecordingModel.class);
    //restTemplate.postForLocation(url + "sportsupload/", recordingToPost);

(正如您在注释行中看到的那样,我尝试了不同的方式来发布对象,但都有这些错误消息)

我的 RecordingModel 对象如下所示:

@JsonIgnoreProperties(ignoreUnknown = true)
//@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class RecordingModel {
private String upload_date;
private String recording_date;
private String name;
private String user;
private String video;
private List<String> sensors = new ArrayList<String>();

public String getName(){
    return name;
}

public List<String> getSensors() {
    return sensors;
}

public String getRecording_date() {
    return recording_date;
}

public String getUpload_date() {
    return upload_date;
}

public String getUser() {
    return user;
}

public String getVideo() {
    return video;
}

public void getRecordingDetails(){
    if(upload_date != null){
        Log.d("RecordingModel", upload_date);
    }
    if(recording_date != null){
        Log.d("RecordingModel", recording_date);
    }
    if(name != null){
        Log.d("RecordingModel", name);
    }
    if(user != null){
        Log.d("RecordingModel", user);
    }
    if(video != null){
        Log.d("RecordingModel", video);
    }
    for(String sensor : sensors){
        Log.d("RecordingModel", sensor);
    }
}

public void setName(String name) {
    this.name = name;
}

public void setRecording_date(String recording_date) {
    this.recording_date = recording_date;
}

public void setSensors(List<String> sensors) {
    this.sensors = sensors;
}

public void setUpload_date(String upload_date) {
    this.upload_date = upload_date;
}

public void setUser(String user) {
    this.user = user;
}

public void setVideo(String video) {
    this.video = video;
}

}

如您所见,我尝试在那里使用 JSONSerialize,但这也不起作用。

你们中有人知道我做错了什么吗?谷歌搜索/Stackoverflowing arround 对我没有帮助...

【问题讨论】:

  • 好的,现在我已将所有 gradle 依赖项更新到最新的 jackson 版本,它正在工作。

标签: android json spring jackson spring-android


【解决方案1】:

而不是@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

试试

@JsonInclude(JsonInclude.Include.NON_NULL)

取决于Jacson version you use, it may be different

【讨论】:

  • 不幸的是,这会导致相同的错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多