REST API'mız, bazı alanların boş olmaması gereken bazı JSON nesneleri girdisini alır. Bunlar, Dize/Tamsayı olabilir veya referans olarak başka bir sınıf örneği olabilir.JSON nesnesinde null olmayan alanı zorla
Bu alanın boşta olup olmadığının api yerine null olması için bu alanı zorlama yöntemini bulmaya çalışıyoruz. Akım: Biz 3 şeyi denedi
class MyObject{ @Required OtherObject someOtherObject; ... }
: bir şey gibi
if (myObject.getSomeOtherObject() == null) throw new SomeException();
Elimizde istediğim
Yükseltme jackson 2.0.6 ve notu kullanın com .fasterxml.jackson.annotation.JsonProperty Ancak, bu sadece çalışmıyor. Bulunan bu referanslar: JsonDeserializer genişletme http://jira.codehaus.org/browse/JACKSON-767
boş kontrol etmek ama sorun bile boş girişe infaz olmamasıdır.
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;
- kendi @Required ek açıklama yazma ve ResourceFilter ile kontrol etmeye çalışırken, ancak edebilsek bile ben, derin denetimi yürütmek için nasıl emin değil ContainerRequest gerçek nesneyi almak ve olamaz gibi görünüyor Herhangi bir yardım ve anlayış
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; } }
object.otherObject.someObject.fieldNotNullable içinde null başvuru takdir.
Bu eski bir soru olmasına rağmen, cevap iyi görünüyor :) Teşekkürler! Kabul edilmiş. Paket adında – urir
yazım hatası: kısıtlamalar – Bax