我想使用架构来验证请求对象。映射中的值之一决定哪些其他字段有效。
例如,这些都是有效的:
{ :name "jane" :type :dog :barking true }
{ :name "alan" :type :bird :cheeping true }
{ :name "bert" :type :fish :swimming true }
有些字段是常见的。但其他的则取决于:type
.
例如,这将是无效的:
{ :name "phil" :type :bird :barking false }
这样的图式如何表达呢?
我很高兴使用 clj-schema 或 Prismatic 模式。
您可以使用 prismatic.schema 的conditional为了实现这一点:
(s/conditional #(= (:type %) :bird) {:type (s/eq :bird) :chirping s/Bool}
#(= (:type %) :fish) {:type (s/eq :fish) :swimming s/Bool}
...
:default {:type (s/eq :animal) :existing s/Bool})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)