2017-10-24 3 views
0

Wir verwenden JAX-RS, um eine REST API für eines unserer Projekte zu implementieren. Voraussetzung ist, dass die Benutzer das Anforderungsobjekt im JSON-Format übergeben.JAX-RS Anfrage Körper Validierung

Nehmen wir an, dass wir eine Methode, die beim Auftreffen auf einen API-Endpunkt

@POST 
@PATH("/api/user") 
@Produces("application/json") 
@Consumes("application/json") 
public CustomResponse methodA(@RequestBody UserInfo userDTO) 

Probe Request-Objekt aufgerufen wird:

{ "firstname": "Test", "nachName": "Name", "sno": "A123" }

UserInfo DTO 
private String firstName; 
private String lastName; 
private String sno; 

Getter und Setter

Wenn der Benutzer nun versucht, dem oben angegebenen Anfrageobjekt weitere Parameter hinzuzufügen (z. B. "age") und einen api-Endpunkt aufruft, konnten wir ihn nicht abfangen und melden, dass er "Ungültig Parameter alge ", da die Anfrage anscheinend nach ungültigen/unbekannten Parametern gefiltert wird und kein Fehler als solcher gemeldet wird.

Irgendwelche Gedanken darüber, wie dies angegangen werden kann?

+0

Welche Implementierung von JAX-RS verwenden Sie? Jersey? Welchen Serialisierer verwendest du (Jackson?)? – Wabi

+0

Ja, Jersey und Jackson. – Kishore

Antwort

0

konnte ich nicht erkannte Eigenschaften identifizieren, indem folgende Stück Code hinzufügen:

Ändern Sie die Methodensignatur öffentlichen CustomResponse methodA (@RequestBody String reqObj)

und dann

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true); 
UserInfo userDTO = mapper.readValue(reqObj, UserInfo.class); 

Wir sehen nun eine com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unbekanntes Feld "<>" für jeden nicht unterstützten Parameter

+0

Sie könnten auch '@JsonIgnoreProperties (ignoreUnknown = false)' in Ihrer 'UserInfo' Klasse einfügen. – Wabi

+0

Ja, ich habe es auch versucht, aber nicht funktioniert – Kishore