Джерси не использует объект JSON - PullRequest
0 голосов
/ 29 мая 2019

Я знаю, что этот вопрос задавался, прежде чем я нашел время, чтобы посмотреть на другие ответы, и ни один из них не помог.Я использую Jersey service для своего приложения, в моем приложении у меня есть несколько объектов, которые у меня consume, некоторые объекты работают нормально, они потребляются без hussle, но нижеприведенный объект просто не будет работать.

public class Params {

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
            "my_destination"
    })
    @JsonProperty("my_destination")
    private Destination myDestination;

    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<>();

    @JsonProperty("my_destination")
    public Destination getMyDestination() {
        return myDestination;
    }

    @JsonProperty("my_destination")
    public void setDestination(Destination destination) {
        this.myDestination = destination;
    }

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }
}


 public class Destination {

        @JsonProperty("latitude")
        private Double latitude;
        @JsonProperty("longitude")
        private Double longitude;
        @JsonIgnore
        private Map<String, Object> additionalProperties = new HashMap<>();

        @JsonProperty("latitude")
        public Double getLatitude() {
            return latitude;
        }

        @JsonProperty("latitude")
        public void setLatitude(Double latitude) {
            this.latitude = latitude;
        }

        @JsonProperty("longitude")
        public Double getLongitude() {
            return longitude;
        }

        @JsonProperty("longitude")
        public void setLongitude(Double longitude) {
            this.longitude = longitude;
        }

        @JsonAnyGetter
        public Map<String, Object> getAdditionalProperties() {
            return this.additionalProperties;
        }

        @JsonAnySetter
        public void setAdditionalProperty(String name, Object value) {
            this.additionalProperties.put(name, value);
        }

    }

И мой Jersey service выглядит как

    @POST
    @Path("/testparams")
    @ManagedAsync
    @Produces({MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_JSON})
    public void testParams(@Suspended final AsyncResponse asyncResponse, Params params) {
        // Params mParams = new Gson().fromJson(params, Params.class);
}

Если я заменю Entities на Gson annotations, как

public class Params {

    @SerializedName("my_destination")
    @Expose
    private Destination myDestination;

}


 public class Destination {

        @SerializedName("latitude")
        @Expose
        private Double latitude;
        @SerializedName("longitude")
        @Expose
        private Double longitude;
}

И заменим параметр вмой сервис со строкой вместо этого типа

    @POST
    @Path("/testparams")
    @ManagedAsync
    @Produces({MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_JSON})
    public void testParams(@Suspended final AsyncResponse asyncResponse, String params) {

       Params mParams = new Gson().fromJson(params, Params.class);
}

Строка Params mParams = new Gson().fromJson(params, Params.class); выполняется в противном случае приложение застревает и ничего не делает.На данный момент я не уверен, что делать или где я могу пойти не так.

Приложение не дает никаких исключений.

...