2012-11-27 18 views
15

Piszę serwis internetowy po raz pierwszy. Stworzyłem usługę WWW RESTful opartą na Jersey. I chcę wyprodukować JSON. Co muszę zrobić, aby wygenerować poprawny typ JSON mojej usługi internetowej?Jak poprawnie produkować JSON przez RESTful web service?

Oto jeden z moich metod:

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

Czy wystarczy, że po prostu podkreślić adnotacji @Produces("application/json") dla mojej metody? W takim razie ta metoda może zwrócić dowolny typ obiektu? Lub tylko ciąg? Czy potrzebuję dodatkowego przetwarzania lub transformacji tych obiektów?

Pomóż mi jako początkujący w rozwiązywaniu tych problemów. Z góry dziękuję!

Odpowiedz

25

Możesz dodawać adnotacje do swojej fasoli za pomocą adnotacji 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; 
    } 
    } 

a następnie metoda będzie wyglądać następująco:

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

Jest rozdział w najnowszej dokumentacji, która zajmuje się następująco:

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

+0

Dzięki za wskazanie części konstruktora bez paramu. To było ważne! – simplysiby

5

Można użyć pakietu jak org.json http://www.json.org/java/

Ponieważ będziesz potrzebować częściej używać JSONObjectów.

Tam można łatwo tworzyć JSONObjects i umieścić niektóre wartości w nim:

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" 
    ]} 

zmienił Ma to tę zaletę, że można budować swoje reakcje w różnych warstwach i zwrócić je jako przedmiot

0

użyj tej adnotacji

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

Czy to nie jest adnotacja wiosenna? Nie sądzę, że to jest ważne. – Entomo

+0

OP jest całkiem jasny: _ "Stworzyłem RESTful serwis internetowy oparty na ** Jersey **." _ Adnotacja '@ GetMapping' nie jest częścią interfejsu API Jersey. Jest to adnotacja Spring MVC. –

2
@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']}"; 
} 
+3

W jaki sposób '@Produces (" application/json ")' różni się od '@Produces (MediaType.APPLICATION_JSON)'? –

+1

To dokładnie to samo. 'MediaType.APPLICATION_JSON' jest stałą, której wartość jest równa' application/json'. Używanie stałej jest mniej podatne na błędy, więc lepszym wyborem – Adrien

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