# PathParam null



## SyntaxTalksToMe (11. Dez 2019)

Guten Tag,

ich möchte Nutzerinformationen ein einer HashMap speichern, damit ich auf ihre Verbindungen und Usernamen zugreifen kann.

Ich poste jetzt erstmal meinen Code und gebe anschließend meine Gedankengänge zum besten 


```
@ServerEndpoint("/websocketendpoint")
public class WsServer {
    
    private Session session;
    private static Set<WsServer> chatEndpoints = new CopyOnWriteArraySet<>();
    private static HashMap<String, String> users = new HashMap<>();
    
    @OnOpen
    public void onOpen(Session session, @PathParam("user_id") String username) throws IOException  {
 
        this.session = session;
        
        System.out.print("Session:  "+session);
        
        
        chatEndpoints.add(this);
        
        System.out.print("PathParam" + username);
        
        session.getUserProperties().put("user_id", username);
        users.put(session.getId(), username);     
    }
```

Ich weiß, dass das PathParam quasi das Request des Clients "auffängt". Allerdings ich verstehe nicht ganz, was hier an dieser Stelle passiert:


```
@PathParam("user_id") String username
```

Der Username ist klar. Aber was macht da der String in Klammern? Ich Schätze das ist der Zeiger. Ich hatte zuerst gedacht, dass da die Verbindungsdetails mitgeteilt werden, aber das passiert ja in der Session.

Ich hatte mich bei dem Code an ein Tutorial gehalten. Was da an sich passiert ist mir klar, bis auf die Sache mit dem @PathParam.

In dem Tutorial war oben neben der ServerEndpoint Notation  das gestanden.

```
@ServerEndpoint(value="/chat/{username}")
```

Was ich daran aber nicht verstehe, wo da die Verbindung liegt. Aber auch das brachte nichts wegen wegen der NullPointer Exception die PathParam auslöst.

Also kurz:
Was genau macht PathParam und was bedeutet der String in Klammern. Und warum habe ich eine NullPointer Exception.

Über eine Erklärung wäre ich sehr dankbar.

Schon mal allen eine schöne Weihnachtszeit


----------



## LimDul (11. Dez 2019)

Hilft dir das weiter:
https://www.mkyong.com/webservices/jax-rs/jax-rs-pathparam-example/


----------



## SyntaxTalksToMe (11. Dez 2019)

LimDul hat gesagt.:


> Hilft dir das weiter:
> https://www.mkyong.com/webservices/jax-rs/jax-rs-pathparam-example/



Nein.


----------



## thecain (11. Dez 2019)

Da steht aber die Erklärung auf deine Fragen


----------



## mihe7 (11. Dez 2019)

Hier auch https://docs.oracle.com/javaee/7/api/javax/websocket/server/PathParam.html


----------



## SyntaxTalksToMe (11. Dez 2019)

Ok, ok. Ich war vielleicht etwas faul. Selbst das Hirneinschalten ist angesagt.. Ich hab auch schon einen Erfolg gehabt gerade. Die NullPointer ist weg. Ich hab mir den Link nochmal angeschaut. Bitte korrigiert mich, wenn ich falsch liege. Ich möchte es kurz rekapitulieren. Nicht dass ich etwas falsch verstanden habe:

Ich notiere die Klasse in der sich meine Information befindet die ich haben möchte mit

```
@Path("/irgendein_sinvoller_name")
```

Dann spreche ich die Methode oder String an, die Informationen hat.

```
@GET
    @Path("{id}")
```


Daraus ergibt sich mein Pfad für den Server.    @ServerEndpoint(value="/irgendein_sinvoller_name/{id}")

Hab ich das soweit verstanden? Dieser PathParam beschreibt also den Weg.

Sorry nochmal. Wollte es mir zu einfach machen. Aber jetzt ist der Lerneffekt auch richtig da 


Nur blöd, dass wenn ich mich jetzt mit dem Server verbinde, er mir einen Error wirft und mich gleich wieder disconnected. Da passt bestimmt noch nicht mit der Notation


----------

