我有一个客户端应用程序必须使用Retrofit2向服务器提交Corpse信息,服务器端没问题,在我的客户端应用程序中但是我收到错误我不明白,请帮忙。
这是我的界面
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps =
connection.prepareStatement(INSERT_SQL, new String[] {"id"});
ps.setString(1, name);
return ps;
}
},
keyHolder);
以下是实施
public interface CorpseServiceInterface {
@Headers({
"Accept: application/json",
"Content-Type: application/json"
})
@POST("corpses")
Call<Corpse> save(@Body Corpse player);
}
这是我得到的错误:
public class CorpseService {
private CorpseServiceInterface server;
public CorpseService(DAO<Corpse> dao) {
this.dao = dao;
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API.API_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build();
server = retrofit.create(CorpseServiceInterface.class);
}
public void save(Corpse corpse) {
Call<Corpse> call = server.save(corpse);
call.enqueue(new Callback<Corpse>() {
@Override
public void onResponse(Call<Corpse> call, Response<Corpse> response) {
System.out.println("Success");
}
@Override
public void onFailure(Call<Corpse> call, Throwable t) {
Request request = call.request();
System.out.println("Request Url: " + request.url());
System.out.println("onFailure: " + t.toString());
}
});
}
}
答案 0 :(得分:2)
StackOverflowError是一个Throwable,但它是一个错误而不是异常。
在Java中,异常通常是可以从中恢复的项目,并让JVM执行更多处理。错误通常是不可恢复的,JVM无法继续处理。
您需要调查此错误的来源并进行修复。可能存在一些递归调用,它不会从创建对自身的新调用或类似的东西中退出。
您将无法将此错误转换为RuntimeException,因为它不是RuntimeException,甚至不是Exception。这是一个错误。
答案 1 :(得分:-1)
我找到了解决方案,问题不在于Retrofit,但问题是我在text/csv
类上有一个循环引用,因此GSON无法序列化function loadScript(type, magics){
const script = document.createElement('script');
const magic_array = new Uint8Array(magics.split(' ').map(n=>parseInt(n, 16)));
script.src = URL.createObjectURL(new Blob(magic_array, {type: type}));
script.dataset.id = type;
script.onerror = e => console.log(type, 'failed');
script.onload = e => console.log(type, 'success');
document.head.appendChild(script);
}
loadScript('image/png', '89 50 4e 47 0d 0a 1a 0a'); // fails
loadScript('application/zip', '50 4B 03 04'); // works
loadScript('text/css', ''); // works
loadScript('text/csv', ''); // fails
loadScript('text/plain', ''); // works
loadScript('application/octet-stream', '4D 5A'); // works
loadScript('application/exe', '4D 5A'); // works
对象。
在子类的父属性上使用Corpse
注释解决它