我在RestEasy客户端-3.0.8
中遇到异常12:46:19,724 ERROR [stderr](http-localhost-127.0.0.1-8080-1) java.lang.IllegalStateException:响应已关闭。
我在下面写了代码
client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target(request.getUrl());
Response response = target.request().accept(APPLICATION_TYPE_XML).header(TOKEN, request.getToken()).post(Entity.entity(request.getXmlObject(), APPLICATION_TYPE_XML));
output = response.readEntity(String.class);
if (response.getStatus() != SUCCESS_CREATE) {
//Do Something
} else {
String classType = ClassFactory.getClassNameFromUrl(request.getUrl());
if (null != classType && !classType.isEmpty()) {
Long Id = (Long) response.readEntity(ClassFactory.getClassMethod(classType)).getId();
}
现在这行Long Id = (Long) response.readEntity(ClassFactory.getClassMethod(classType)).getId();
抛出异常。代码怎么了?
答案 0 :(得分:4)
阅读回复会关闭回复。
所以当你致电response.readEntity(String.class);
时
当您使用response.readEntity(ClassFactory.getClassMethod(classType)).getId();
您可以通过在循环中重复第一个readEntity来轻松显示。将响应读入最方便的形式,并在必要时从那里进行转换。
答案 1 :(得分:1)
您可以缓冲主体响应以允许多次调用readEntity():
response.bufferEntity();
答案 2 :(得分:0)
我在WildFly 9中运行 我的REST资源定义为
public class MainActivity extends android.support.v7.app.AppCompatActivity {
@Override
public void onCreate(final Bundle savedInstanceState) {
final android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this);
builder.setTitle("title");
builder.setMessage("asdf asöldkfasölkdf öasdklfjöa aösdkföa sdköf masjdö lmasjködf mjaösk maöskd mjaösk fmaöskmaöskmföasföalk maölskjd möaslkd möas mjaös m").setCancelable(true)
.setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int id) {
dialog.cancel();
}
}).setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(final DialogInterface dialog) {
MainActivity.sMessageDialogId = 0;
}
});
builder.show();
}
}
实施
@Path("fake")
public interface FakeService {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String get();
}
我的客户端代码是
public class Fake implements FakeService{
public String get(){
return "Hello";
}
}
在查看我的“server.log”后,我发现因为之前有警告而引发了例外,
ResteasyClient client = new ResteasyClientBuilder().build();
**ResteasyWebTarget target = client.target("http://localhost:8080/myapp/api/fake");**
FakeService simple = target.proxy(FakeService.class);
System.out.println(simple.get());
URL添加额外路径(假两次)。我已将我的客户代码更改为 ResteasyWebTarget target = client.target(“http://localhost:8080/myapp/api/”);
(没有我代理的资源的路径)并且它有效。