JAX-RS для использования файла JSON генерирует ошибку 415 - PullRequest
0 голосов
/ 06 мая 2020

Я хотел бы создать службу REST с JAX-RS и Jersey для использования структуры JSON.

Я использую org.glassfi sh .jersey и gradle, поэтому вставил gradle-build file:

compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet-core', version: '2.26-b03'
compile group: 'org.glassfish.jersey.media', name: 'jersey-media-multipart', version: '2.26-b03'
compile group: 'org.glassfish.jersey.core', name: 'jersey-common', version: '2.26-b03'
compile group: 'org.glassfish.jersey.core', name: 'jersey-server', version: '2.26-b03'
compile group: 'org.glassfish.jersey.core', name: 'jersey-client', version: '2.26-b03'

Я активировал функцию сопоставления POJO в сети. xml:

<init-param>
   <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
   <param-value>true</param-value>
</init-param>

Я написал простой класс для управления JSON сущностью и использую аннотации XMLElement.

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="polygongjson")
public class PolygonGJson {

    @XmlElement(name="type")
    String type;
    @XmlElement(name="properties")
    String properties;
    @XmlElement(name="geometry")
    String geometry;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getProperties() {
        return properties;
    }

    public void setProperties(String properties) {
        this.properties = properties;
    }

    public String getGeometry() {
        return geometry;
    }

    public void setGeometry(String geometry) {
        this.geometry = geometry;
    }

    @Override
    public String toString() {
        return "Track [type=" + type + ", properties=" + properties + ", geometry=" + geometry +"]";
    }
}

Наконец, я создал метод REST для использования структуры JSON через POST.

Path("/upload")
public class UploadRaster extends Application {

    @POST
        @Consumes(MediaType.APPLICATION_JSON)
        @Path("/j_geojson/{id_user}")
        public Response uploadGeoJSON(@PathParam("id_user") String id_user,
                                      PolygonGJson polyIn){


            try{

                System.out.println("JSON: "+polyIn.toString());
                return Response.status(200).entity(polyIn.getGeometry()).build();

            }catch(Exception e){

                return Response.status(500).entity(e.getMessage()).build();
            }
        }
}

Я подготовил простой json файл:

{
   "type": "Feature",
   "properties": "test prop",
   "geometry": "test geo"
}

Чтобы проверить свой метод, я использовал curl следующим образом:

curl -X POST -H "Content-Type: application/json" -d @./testgjsimple.json https://myserver:8443/mywarfile/api/upload/j_geojson/1

, но сервер отвечает:

HTTP Status 415 - Unsupported Media Type
Unsupported Media Type
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

ПРИМЕЧАНИЕ: мой сервер приложений - Tomcat 7 .

Есть идеи?

1 Ответ

0 голосов
/ 06 мая 2020

Насколько мне известно, структуры XML и JSON обрабатываются по-разному. Таким образом, часть:

...
@XmlRootElement(name="polygongjson")
public class PolygonGJson {
    @XmlElement(name="type")
    String type;
...

может привести к тому, что JSON не может использоваться должным образом.

Попробуйте без подобных аннотаций (она должна работать):

...
public class PolygonGJson {
    String type;
...

или, если вы хотите изменить некоторые особенности, используйте аннотации для JSON (я бы предпочел jackson).

...