Restlet获取HTTP状态代码204而不是200 [英] Restlet Getting HTTP Status code 204 instead of 200

查看:84
本文介绍了Restlet获取HTTP状态代码204而不是200的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于第一个请求,我得到了JSON响应.从下一个请求开始,即使ServerResource成功返回了表示形式,我也开始获取此日志和HTTP状态代码204

For the 1st request, I get the JSON response. From the next request onwards I start getting this log and HTTP Status Code 204, even though the ServerResource is successfully returning a representation

org.restlet.engine.adapter.ServerAdapter commit
WARNING: A response with an unavailable and potentially non empty entity was returned. Ignoring the entity for resource http://localhost:8888/xyz?abc=def

布线路线的应用程序类

@Override
public Restlet createInboundRoot() {
    router = new Router(getContext());
    CorsService corsService = new CorsService();         
    corsService.setAllowedOrigins( new HashSet<String>(Arrays.asList("http://example.com")));
    corsService.setAllowedCredentials(true);
    getServices().add(corsService);
    router.attach("/xyz", XYZ.class);
}

处理并返回JSON表示形式的服务器资源

Server Resource which handles and returns a JSON Representation

public class XYZ extends ServerResource {

    private static final Logger logger = Logger.getLogger("API:XyZ");

    @Get(":json")
    public Representation handleGetRequest() {
         ..
         return API_RESPONSE_JSON_REPRESENTATION_SUCCESS;
    }
}

推荐答案

释放响应后,表示状态 available 设置为false.因此,随后对 ServerResource 的调用返回了表示形式,但是在 handle()方法中,由于 getResponseEntity().isAvailable(),它被设置为204.返回 false .

After releasing the response, the representation state available is set to false. So subsequent calls to the ServerResource, returns the Representation but in handle() method it is set to 204 since getResponseEntity().isAvailable() returns false.

来自 ServerResource :

@Override
public Representation handle() {
       ...
        } finally {
            if (Status.CLIENT_ERROR_METHOD_NOT_ALLOWED.equals(getStatus())) {
                updateAllowedMethods();
            } else if (Status.SUCCESS_OK.equals(getStatus())
                    && (getResponseEntity() == null || !getResponseEntity()
                            .isAvailable())) {
                getLogger()
                        .fine("A response with a 200 (Ok) status should have an entity. "
                                + "Changing the status to 204 (No content).");
                setStatus(Status.SUCCESS_NO_CONTENT);
            }
        }
    }
    return result;
}

解决方案

每次返回新的表示形式,或者在返回表示形式之前将setAvailable设置为true

Either return a new representation every time or setAvailable to true before returning the representation

这篇关于Restlet获取HTTP状态代码204而不是200的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆