如何在GoogleApis Places中添加FieldMask?请求报错400解决
解决Google Places API请求缺少FieldMask的400错误
调用Google Places Text Search API时出现400错误,核心原因是该API强制要求指定FieldMask参数,用来明确请求需要返回哪些字段。以下是两种在Dart代码中添加FieldMask的可行方法:
方法一:通过请求头添加
在调用searchText方法时,传入headers参数设置X-Goog-FieldMask:
import 'package:googleapis/places/v1.dart'; import 'package:googleapis_auth/googleapis_auth.dart'; import 'package:http/http.dart' as http; final http.Client client = clientViaApiKey(apikey); final PlacesApi places = PlacesApi(client); GoogleMapsPlacesV1SearchTextResponse res = await places.places.searchText( GoogleMapsPlacesV1SearchTextRequest( textQuery: "mcDonals Near Me", maxResultCount: 10, locationRestriction: GoogleMapsPlacesV1SearchTextRequestLocationRestriction.fromJson({ "circle": { "center": {"latitude": 37.7937, "longitude": -122.3965}, "radius": 500.0 } }), ), headers: { // 按需指定返回字段,多个字段用逗号分隔 'X-Goog-FieldMask': 'places.id,places.displayName,places.formattedAddress,places.location', // 测试阶段可使用'*'获取所有字段,生产环境不推荐 // 'X-Goog-FieldMask': '*', }, );
方法二:通过查询参数添加
部分googleapis库的方法支持直接传入$fields参数,格式采用嵌套结构:
import 'package:googleapis/places/v1.dart'; import 'package:googleapis_auth/googleapis_auth.dart'; import 'package:http/http.dart' as http; final http.Client client = clientViaApiKey(apikey); final PlacesApi places = PlacesApi(client); GoogleMapsPlacesV1SearchTextResponse res = await places.places.searchText( GoogleMapsPlacesV1SearchTextRequest( textQuery: "mcDonals Near Me", maxResultCount: 10, locationRestriction: GoogleMapsPlacesV1SearchTextRequestLocationRestriction.fromJson({ "circle": { "center": {"latitude": 37.7937, "longitude": -122.3965}, "radius": 500.0 } }), ), // 用括号嵌套指定返回字段 $fields: 'places(id,displayName,formattedAddress,location)', // 测试阶段可使用'*'获取所有字段 // $fields: '*', );
注意:生产环境建议明确指定所需字段,避免返回冗余数据,提升请求性能与响应速度。
内容的提问来源于stack exchange,提问作者Pranay Dhongade
相关产品推荐
相关产品推荐

