में गैर-शून्य फ़ील्ड को लागू करें हमारे आरईएसटी एपीआई कुछ JSON ऑब्जेक्ट इनपुट प्राप्त करता है जहां कुछ फ़ील्ड को शून्य नहीं होना चाहिए। वे या तो स्ट्रिंग/इंटीजर हो सकते हैं या संदर्भ के रूप में कुछ अन्य वर्ग उदाहरण भी हो सकते हैं।JSON ऑब्जेक्ट
हम उन क्षेत्रों को लागू करने के लिए एक तरीका खोजने की कोशिश कर रहे हैं, जो कि एपीआई में शून्य जांच के लिए सक्षम तरीका है। वर्तमान:
class MyObject{ @Required OtherObject someOtherObject; ... }
हम 3 चीजों की कोशिश की है:
if (myObject.getSomeOtherObject() == null) throw new SomeException();
कुछ की तरह क्या हम करना चाहते है
अपग्रेड जैक्सन 2.0.6 करने के लिए और एनोटेशन का उपयोग कॉम .fasterxml.jackson.annotation.JsonProperty लेकिन, यह सिर्फ काम नहीं कर रहा है। पाए जाने वाले संदर्भ: http://jira.codehaus.org/browse/JACKSON-767
JsonDeserializer विस्तार अशक्त जाँच करने के लिए है, लेकिन समस्या यह है कि यह और भी अशक्त इनपुट पर निष्पादित नहीं करता है।
public class NotNullDeserializer<T> extends JsonDeserializer<T> { @Override public T deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException, JsonProcessingException { ParameterizedType superClass = (ParameterizedType) getClass().getGenericSuperclass(); Class type = (Class) superClass.getActualTypeArguments()[0]; T t = jsonparser.readValueAs(type); if (t == null){ String classNameField = type.getName(); String field = jsonparser.getCurrentName(); throw new WrongInputException("The field '"+field+"' of type '"+classNameField+"' should not be null."); } return t; } } public class NotNullAddressDeserializer extends NotNullDeserializer<Address> { } @JsonDeserialize(using=NotNullAddressDeserializer.class) Address to;
- हमारे अपने @Required एनोटेशन लेखन और ResourceFilter के साथ जांच करने की कोशिश कर, लेकिन यह मैं नहीं, ContainerRequest से वास्तविक वस्तु प्राप्त कर सकते हैं और यहां तक कि हम कर सकते थे अगर यकीन है कि गहरी जांच निष्पादित करने के लिए कैसे नहीं लगता है object.otherObject.someObject.fieldNotNullable में
private class Filter implements ResourceFilter, ContainerRequestFilter { private final ArrayList requiredParameters; protected Filter() { requiredParameters = null; } protected Filter(ArrayList requiredParameters) { this.requiredParameters = requiredParameters; } @Override public ContainerRequestFilter getRequestFilter() { return this; } @Override public ContainerResponseFilter getResponseFilter() { return null; } @Override public ContainerRequest filter(ContainerRequest request) { if (requiredParameters != null && requiredParameters.size() > 0) { MultivaluedMap params = request.getQueryParameters(); params.putAll(request.getFormParameters()); StringBuffer missingParams = new StringBuffer(); for (String reqParam : requiredParameters) { List paramValues = params.get(reqParam); if (paramValues == null || paramValues != null && paramValues.size() == 0) missingParams.append(reqParam + ","); } if (missingParams.length() > 0) throw new WrongInputException("Required parameters are missing: " + missingParams); } return request; } }
किसी भी मदद की और अंतर्दृष्टि की अशक्त संदर्भ की सराहना की।
हालांकि यह पुराना सवाल है, जवाब अच्छा दिखता है :) धन्यवाद! स्वीकार किए जाते हैं। पैकेज नाम में – urir
टाइपो: बाधाएं – Bax