使用Jersey REST Service从JSON解析bean的最佳方法

时间:2017-07-11 13:29:16

标签: json rest post gson jersey-2.0

我有一个Java bean定义如下:

public class Person {

    private String name;
    private String surname;

    public Person(String name, String surname) {
        this.name = name;
        this.surname = surname;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return this.surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
}

我写过这个简单的REST方法,如果我通过POST传递:

{ "name": "John", "surname": "Doe"}

它有效。

import com.google.gson.Gson;

@Path("/person")
public class PersonRestService {
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getMsg(String inputJsonObj) {

        Persona p = new Gson().fromJson(inputJsonObj, Person.class);

        System.out.println("Name: " + p.getName());
        System.out.println("Surname: " + p.getSurname());

        return Response.status(200).build();
    }
}

但为什么我要接受String作为方法的输入字段?

我试图在getMsg方法中接受一个Person对象,并且仍然像这样传递一个JSONObject:

{ "name": "John", "surname": "Doe"}

但我得到了 HTTP状态415 - 不支持的媒体类型

直接在方法中接收Person对象的最简单方法是什么,而不是在方法内部使用Gson解析它?

提前致谢:)

1 个答案:

答案 0 :(得分:1)

  

但我收到了HTTP状态415 - 不支持的媒体类型。

You need a JSON Provider。还要确保您的POJO具有默认构造函数。

如果您正在使用Maven,则可以添加以下依赖项

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey2.version}</version>
</dependency>

如果您手动添加广告,请查看this post