# Response eines RESTful-Service mit JSON



## xrax (25. Jul 2016)

Hallo zusammen,

ich möchte folgendes in einem RESTful-Service mit JSON realisieren:
Ich frage mit einem Client wie folgt:


```
import javax.ws.rs.*

WebResource wrs = Client.create().resource( url );
System.out.println( "\nJSON-Ausgabe:" );
      System.out.println( wrs.accept( MediaType.APPLICATION_JSON  ).get( String.class ) );
```

Der Server soll dann mit dem Inhalt eines DB-Request antworten.

Ich bekomme es hin das mir der Server überhaupt antwortet:

```
import javax.ws.rs.core.MediaType;

@GET @Produces( MediaType.APPLICATION_JSON )
   public JsonObj halloHtml2(  )
   {
       JsonObj track = new JsonObj();
       track.setSinger("Metallica");
        track.setTitle("Enter Sandman");
        return track;
   }
```
Antwort:
JSON-Ausgabe:
{"title":"Enter Sandman","singer":"Metallica"}

Nur müßte ich dafür ja für jeden Anfragetyp eine Classe schreiben.

Wie mache ich dass, damit die Response auf die Clientanfrage aus einem ResultSet gebildet wird.
Oder, wie komme ich an das HttpServletResponse-Object ? Bei einem anderen Project habe ich das von einem Servlet bekommen , aber hier habe (bzw. sehe) ich kein Servlet.

Wenn keiner was weis würe ich mich auch über eine Literaturempfehlung freuen.

Besten Dank
xrax


----------



## dayaftereh (25. Jul 2016)

Du kannst Spring Boot benutzen. Schau mal hier: https://spring.io/guides/gs/consuming-rest/


----------



## xrax (26. Jul 2016)

Danke dayaftereh, ich finde da aber keine Antwort auf meine Frage.


----------



## mrBrown (26. Jul 2016)

Hast du dir SpringBoot denn mal genauer angeguckt? Du müsstest halt deinen RESTful-Service neu mit SpringBoot als Framework umsetzten, lohnt sich also nur, wenn noch nicht zu viel steht.

Mit Hibernate im Hintergrund kannst du dein Problem recht schnell lösen, theoretisch reicht es da, einfach das Ergebnis der Abfrage zu returnen, und fertig.


```
@RequestMapping(value="/track/{id}",
                method=RequestMethod.GET,
                produces=MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
   public Track getTrack(String id)
   {
    return trackRepository.get(id);
   }
```


Oder gehts dir nicht um Server-Seitigen Code, sondern den für'n Client? (da gäbe auch was passendes aus der Spring-Familie)


----------



## Andy17 (29. Jul 2016)

Du kannst Dir schlicht und ergreifend einzelne EntityServices bauen, welche dir einen Zugriff auf die Ressource ermöglichen. Diese können über EntityManager und eigens gebaute BaseServices die Datenbank manipulieren. Und das auf sichere, zuverlässige Art und Weise. Wenn Du den Client das SQL schreiben lässt, dann kann ganz schnell ein Fall von SQL-Injection der unschönen Art und Weise auftreten.

Klar, du musst hierfür ein paar Klassen schreiben. Aber das ist in kürzerer Zeit getan, als es dauert, mit den Konsequenzen von SQL-Injection klarzukommen. Das solltest Du eventuell noch abwägen.


----------



## mrBrown (29. Jul 2016)

Andy17 hat gesagt.:


> Du kannst Dir schlicht und ergreifend einzelne EntityServices bauen, welche dir einen Zugriff auf die Ressource ermöglichen. Diese können über EntityManager und eigens gebaute BaseServices die Datenbank manipulieren. Und das auf sichere, zuverlässige Art und Weise. Wenn Du den Client das SQL schreiben lässt, dann kann ganz schnell ein Fall von SQL-Injection der unschönen Art und Weise auftreten.
> 
> Klar, du musst hierfür ein paar Klassen schreiben. Aber das ist in kürzerer Zeit getan, als es dauert, mit den Konsequenzen von SQL-Injection klarzukommen. Das solltest Du eventuell noch abwägen.


Meinst du mich oder den TE?


----------



## Andy17 (29. Jul 2016)

Der TE


----------



## dayaftereh (29. Jul 2016)

Ok, reden wir über die Client oder Server Seite ?


----------



## Andy17 (29. Jul 2016)

REST wird serverseitig implementiert.


----------

