Как правильно производить 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})