33import java .util .Collections ;
44import java .util .HashMap ;
55import java .util .Map ;
6+ import java .util .Objects ;
67
78/**
89 * A minimal DSL for building a "query" filter.
@@ -21,7 +22,8 @@ public class DocumentQuery {
2122 * @return this query instance for chaining
2223 */
2324 public DocumentQuery eq (String field , Object value ) {
24- criteria .put (field , value );
25+ String validatedField = requireFieldName (field );
26+ criteria .put (validatedField , value );
2527 return this ;
2628 }
2729
@@ -33,9 +35,11 @@ public DocumentQuery eq(String field, Object value) {
3335 * @return this query instance for chaining
3436 */
3537 public DocumentQuery gte (String field , Object value ) {
38+ String validatedField = requireFieldName (field );
39+ Objects .requireNonNull (value , "Greater-than-or-equal value cannot be null." );
3640 Map <String , Object > op = new HashMap <>();
3741 op .put ("$gte" , value );
38- criteria .put (field , op );
42+ criteria .put (validatedField , op );
3943 return this ;
4044 }
4145
@@ -47,7 +51,9 @@ public DocumentQuery gte(String field, Object value) {
4751 * @return this query instance for chaining
4852 */
4953 public DocumentQuery raw (String field , Object expression ) {
50- criteria .put (field , expression );
54+ String validatedField = requireFieldName (field );
55+ Objects .requireNonNull (expression , "Raw expression cannot be null." );
56+ criteria .put (validatedField , expression );
5157 return this ;
5258 }
5359
@@ -59,4 +65,11 @@ public DocumentQuery raw(String field, Object expression) {
5965 public Map <String , Object > toMap () {
6066 return Collections .unmodifiableMap (criteria );
6167 }
68+
69+ private static String requireFieldName (String field ) {
70+ if (field == null || field .isBlank ()) {
71+ throw new IllegalArgumentException ("Query field name cannot be null or blank." );
72+ }
73+ return field ;
74+ }
6275}
0 commit comments