我将Dart中的表单序列化为JSON,然后使用Jackson将其发布到Spring MVC后端,以反序列化JSON。
在飞镖中,如果我打印出JSON,我会得到:
{firstName: piet, lastName: venter}
杰克逊不喜欢这种格式的数据,它返回状态400和The request sent by the client was syntactically incorrect.
如果我在所有字段周围加上引号,杰克逊会接受这些数据,然后我会收到回复。
{"firstName": "piet", "lastName": "venter"}
在dart中,我构建了一个Map<String, String> data = {};
,然后遍历所有表单字段并执行data.putIfAbsent(input.name, () => input.value);
现在当我打电话给data.toString()
时,我得到了一个不带引号的JSON,我猜测它是无效的JSON。
如果我import 'dart:convert' show JSON;
并尝试JSON.encode(data).toString();
,我会得到相同的不带引号的JSON。
手动添加双引号似乎有效:
data.putIfAbsent("\"" + input.name + "\"", () => "\"" + input.value + "\"");
在Java方面,没有火箭科学:
@Controller
@RequestMapping("/seller")
@JsonIgnoreProperties(ignoreUnknown = true)
public class SellerController {
@ResponseBody
@RequestMapping(value = "/create", method = RequestMethod.POST, headers = {"Content-Type=application/json"})
public Seller createSeller(@RequestBody Seller sellerRequest){
所以我的问题是,在Dart构建引用的JSON(除了手动转义引号和手动添加引号之外)是否有一种不太常见的方式,杰克逊期望? 杰克逊可以配置为允许不带引号的JSON吗?
答案 0 :(得分:17)
import 'dart:convert';
json.encode(data)
(JSON.encode(data)
Dart 1)始终为我引用了引用的JSON(您不需要致电toString()
答案 1 :(得分:5)
简单方法
import 'dart:convert';
Map<String, dynamic> jsonData = {"name":"vishwajit"};
print(JsonEncoder().convert(jsonData));
答案 2 :(得分:0)
如果数据内容是动态的,则以下功能可帮助在服务器上使用带引号的发送来发送JSON数据。此功能可以像在Dart中转换字符串一样使用。
导入内置的convert
库,其中包括jsonDecode()
和jsonEncode()
方法:
import 'dart:convert'; //Don't forget to import this
dynamic convertJson(dynamic param) {
const JsonEncoder encoder = JsonEncoder();
final dynamic object = encoder.convert(param);
return object;
}
您会使用/称呼它
Future<dynamic> postAPICallWithQuoted(String url, Map param, BuildContext context) async {
final String encodedData = convertJson(param);
print("Calling parameters: $encodedData");
var jsonResponse;
try {
final response = await http.post(url,
body: encodedData).timeout(const Duration(seconds: 60),onTimeout : () => throw TimeoutException('The connection has timed out, Please try again!'));
} on SocketException {
throw FetchDataException(getTranslated(context, "You are not connected to internet"));
} on TimeoutException {
print('Time out');
throw TimeoutException(getTranslated(context, "The connection has timed out, Please try again"));
}
return jsonResponse;
}