سؤال

لدي JSON التالية، حيث يمكن أن يكون إما صحيحا أو خطأ:

{"flag1":<boolean value>, "flag2":<boolean value>}

وقد حاولت ربطها بفئة Java باستخدام جيرسي والشروح Jaxb التالية:

@XmlRootElement
public class MyClass {
    @XmlElement(name = "flag1", type = Boolean.class)
    private Boolean flag1;
    @XmlElement(name = "flag2", type = Boolean.class)
    private Boolean flag2;

    ...
}

المشكلة هي أنه عند تعيين قيمة غير منطقية إلى "Flag1" أو "Flag2"، مثل في المثال أدناه، يقوم Jaxb تلقائيا بتسمية قيمة خاطئة إلى حقول "Flag1" و "Flag2" في MyClass.

{"flag1":"foo", "flag2":"bar"}

هل هناك طريقة للتعليق على "myclass" بحيث عندما تكون "Flag Flag 'و" Flag2 "JSON" و "Flag2" غير منطقي، أحصل على استثناء؟

هل كانت مفيدة؟

المحلول

يبدو وكأنه جيرسي هو ببساطة استخدام boolean.valueof., ، الذي يعامل كل شيء آخر غير "صحيح" حرفي كخطأ. نظرا لأن JavaScript ليس لديه فكرة عن نوع متغير، فهذا هو سلوك صالح يمكن القول.

يعتمد تعيين XML، بالمقارنة، على تعريف المخطط، والذي يحتوي على فكرة محددة للغاية لقيم المنطقية.


عدم استخدام جيرسي (أو Jaxb منذ أيام 1.x)، فأنا أتساءل عما إذا كان عليك التعليق على المتغيرات الفعلية، أو إذا كنت تستطيع التعليق على setters. أو ربما يمكنك توفير قاعدة يستغرق String ويقرها، بدلا من / إلى جانب رصيف يأخذ boolean.

نصائح أخرى

ما أظهرته من شأنه أن يعمل بالطريقة التي تريدها (رمي استثناء) إذا كنت تستخدم مزود جاكسون جاكسون JAX-RS. يقبل بعض الاختلافات (1 و 0، لأن بعض اللغات ليس لديك نوع منطقية أصلية)، ولكن ليس أشياء لا تحتوي على ما يعادلها هادفا.

بدلا من ذلك، كما هو مقترح، فإن طريقة STERTER مع سلسلة نوع من شأنها أن تكون ذات معنى، حيث يمكنك التحكم يدويا في التحويلات يدويا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top