2017-04-11 3 views
1

Hier kann die Funktion headerQueryParam springt alles nach Ampersand Zeichen

@GET 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
@Path("/getxyz") 
public Response getXyz(@QueryParam("input") String input){ 

SomeClass abc = someService.getValue(input); 

und der Eingangswert kann Ampersand enthalten auch. Das Problem, mit dem ich konfrontiert bin, ist, wenn ich @QueryParam verwende, überspringt alle Werte nach dem Und-Zeichen.

Bsp: Wenn die Eingabe test&test erneut von der Browser-Seite erfolgt, wird sie nur als test interpretiert.

Auch ich kodiere die Eingabe auf der Client-Seite mit encodeURIComponent(input).

Irgendwelche Gedanken?

Antwort

2

Abfrage Params von & Symbol seprated ist, das ist der Grund, warum es zweiten Test überspringt nach & in Ihrem Fall. Wenn Sie beide test möchten, dann senden Sie sie als test and test in URL.

Lesen Sie auch What is the proper way to seperate query string parameters in a url?, wie Abfrageparameter gesendet werden.

+0

Aber dies wird die Eingabeabfrage selbst ändern, wenn wir '&' in 'und' ändern. Gibt es eine bessere Möglichkeit, die Abfrageparameter zu analysieren? – ajup

+0

Müssen Sie es wirklich als "Test & Test" bestehen? –

+0

Wenn ja, dann versuch es wie key = "test & test", also lege deinen Wert in doppelte Anführungszeichen. –

3

Sie sollten das kaufmännische Und-Symbol auf der Browserseite codieren, verwenden Sie test%26test anstelle von test&test. Wenn Sie wie gesagt encodeURIComponent verwenden, zeigen Sie bitte Ihren Abfrageparameter nach der Codierung auf der Clientseite an. Es konnte sein,

+0

Ja, ich sehe es als Test% 20% 26% 20test – ajup

1

Schließlich konnte ich dieses Problem mit Spring MVC Framework beheben, d. H. Mit @RequestParam, um die Eingabeanforderung zu analysieren. Es decodiert test%20%26%20test zu test & test genau.

Dieser Ansatz ist nützlich, wenn Ihr Projekt Spring MVC zusammen mit Jersey verwendet. Vielen Dank für Ihre wertvollen Anregungen!