Как правильно производить JSON веб-службой RESTful?

Я пишу веб-сервис в первый раз. Я создал веб-службу RESTful на основе Jersey. И я хочу создать JSON. Что мне нужно сделать для создания правильного типа моего веб-сервиса JSON?

Вот один из моих методов:

@GET
@Path("/friends")
@Produces("application/json")
public String getFriends() {
    return "{'friends': ['Michael', 'Tom', 'Daniel', 'John', 'Nick']}";
}

Достаточно ли просто указать аннотацию @Produces("application/json") для моего метода? Тогда этот метод может возвращать любой тип объекта? Или только String? Нужна ли дополнительная обработка или преобразование этих объектов?

Пожалуйста, помогите мне в качестве новичка, чтобы справиться с этими проблемами. Спасибо заранее!

Ответы

Ответ 1

Вы можете аннотировать ваш bean аннотациями jaxb.

  @XmlRootElement
  public class MyJaxbBean {
    public String name;
    public int age;

    public MyJaxbBean() {} // JAXB needs this

    public MyJaxbBean(String name, int age) {
      this.name = name;
      this.age = age;
    }
  }

а затем ваш метод будет выглядеть так:

   @GET @Produces("application/json")
   public MyJaxbBean getMyBean() {
      return new MyJaxbBean("Agamemnon", 32);
   }

В последней документации, посвященной этой теме, есть глава:

https://jersey.java.net/documentation/latest/user-guide.html#json

Ответ 2

Вы можете использовать пакет, например org.json http://www.json.org/java/

Потому что вам нужно будет чаще использовать JSONObject.

Здесь вы можете легко создать JSONObjects и поместить в него некоторые значения:

 JSONObject json = new JSONObject();
 JSONArray array=new JSONArray();
    array.put("1");
    array.put("2");
    json.put("friends", array);

    System.out.println(json.toString(2));


    {"friends": [
      "1",
      "2"
    ]}

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

Ответ 3

@GET
@Path("/friends")
@Produces(MediaType.APPLICATION_JSON)
public String getFriends() {

    // here you can return any bean also it will automatically convert into json 
    return "{'friends': ['Michael', 'Tom', 'Daniel', 'John', 'Nick']}";
}

Ответ 4

@POST
@Path ("Employee")
@Consumes("application/json")
@Produces("application/json")
public JSONObject postEmployee(JSONObject jsonObject)throws Exception{
    return jsonObject;
}       

Ответ 5

Используйте эту аннотацию

@RequestMapping(value = "/url", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})