来自Jersey服务器端点的错误请求

时间:2018-03-13 18:07:15

标签: java json jersey gson payara

我一直在查看提交请求时出现的问题;

X-Forwarded-For: so.me.ip.ad
Authorization: Bearer blahblahblahstuff
Accept: application/json
Content-Type: application/json; charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.8.0_60
Host: the.endpoint.io
Connection: keep-alive
Content-Length: 395 

具有语法正确的Gson json体。它的长度完全相同,而且形状良好。我使用wireshark捕获确切的响应,数字加起来。也就是说,我不认为请求机构的结尾有臃肿。如果wireshark无法接受,请告诉我。考虑到这一点,我认为修复here不适用于此问题。

我一直在测试它在本地运行payara,而生产服务器也是payara(完全相同的版本)。在本地,请求很好,按预期工作,使用完全相同的params live,端点未到达,因为我们处理我们自己的api错误代码,这个在html中给出,而不是json,并且可以在下面看到;

  

Payara Server   4.1.2.173 #badassfish - 错误报告

HTTP   状态400 - 错误请求


键入:状态   报告

消息:错误请求

描述:   客户端发送的请求是语法上的   不正确。


Payara Server 4.1.2.173   #badassfish

我们正在使用HttpUrlConnection库执行post;

        URL url = new URL(uri);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        if (this.clientip != null && !this.clientip.isEmpty())
        {
            connection.addRequestProperty("X-Forwarded-For", this.clientip);
        }
        if (this.vauthtoken != null && !this.vauthtoken.isEmpty())
        {
            connection.addRequestProperty("Authorization", "Bearer " + this.vauthtoken);
        }
        connection.setRequestProperty("Accept", "application/json");
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        connection.setRequestMethod(this.method);
        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);

        if(this.body != null)
        {
            try (OutputStream os = connection.getOutputStream()) {
                os.write(this.body.toString().getBytes("UTF-8"));
            }
        }

        if(connection.getResponseCode() == HttpURLConnection.HTTP_OK)
        {
            response = this.getJsonBody(connection.getInputStream());
        }
        else
        {
            response = this.getJsonBody(connection.getErrorStream());
        }

我们的终点看起来像;

@Path("/some/path")
public class SomeClass extends SomeThingelse {

    final static Logger LOGGER = Logger.getLogger(SomeClass.class.getName());

    @POST
    @Audit
    @Secured(roles = {Role.SOMEROLE}, crud = Crud.CREATE)
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response someMethodRelating(@Context SecurityContext securityContext, @Valid SomeValidatedClass svClass)
    {

我错过了什么吗?或者这更像是一个服务器问题?非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

要么您没有使用正确的方法(使用GET而不是POST),要么您发送的正文不是JSON,或者不验证SomeValidatedClass中的规则。