To send List of IDs – a List<UUID> (orList<String> in Dart format) – to a Java Spring Boot backend as a @RequestBody, using Dart with Retrofit annotations, you can proceed like this:
✅ Spring Boot Backend (Example)
Your controller might look like:
@PostMapping("/uuids")
public ResponseEntity<Void> receiveUuids(@RequestBody List<UUID> uuids) {
System.out.println("Received UUIDs: " + uuids);
return ResponseEntity.ok().build();
}
Spring will automatically convert the incoming JSON array of UUID strings to a List<UUID>.
✅ Dart Retrofit Setup
Here’s how to send it using Retrofit in Dart:
1. Retrofit Interface
import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';
part 'your_api_client.g.dart';
@RestApi(baseUrl: "http://your.api.url")
abstract class YourApiClient {
factory YourApiClient(Dio dio, {String baseUrl}) = _YourApiClient;
@POST("/uuids")
Future<void> sendUuids(@Body() List<String> uuids);
}
2. Sending UUIDs
final dio = Dio();
final client = YourApiClient(dio);
final uuidList = [
"550e8400-e29b-41d4-a716-446655440000",
"123e4567-e89b-12d3-a456-426614174000"
];
await client.sendUuids(uuidList);
✅ Notes
- Dart UUIDs are typically handled as strings when serializing to JSON.
- If you’re using the
uuidpackage in Dart, just use.toString()to get valid string representations. - Ensure your
Content-Typeheader isapplication/json(Dio does this by default).
How to do this manually: Ensure your Content-Type header is application/json (Dio does this by default).
✅ Best Way to Set Content-Type: application/json in Dart Retrofit
Since Dio handles application/json automatically when using @Body() with JSON-serializable types (like List<String>), you usually don’t need to set it.
However, to do it manually, here are your options:
✅ Option 1: Set globally on Dio
final dio = Dio(BaseOptions(
baseUrl: "http://your.api.url",
headers: {
"Content-Type": "application/json",
},
));
final client = YourApiClient(dio);
✅ Option 2: Set dynamically with @Header()
If you want to control it per call:
Retrofit API definition:
@POST("/uuids")
Future<void> sendUuids(
@Header("Content-Type") String contentType,
@Body() List<String> uuids,
);
Calling it:
await client.sendUuids("application/json", uuidList);
✅ Option 3: Dio interceptor (for advanced control)
You can also use an interceptor to force application/json if needed for all or specific requests.
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
options.headers["Content-Type"] = "application/json";
return handler.next(options);
},
));
Here is more about Universal IDs in Flutter : https://programtom.com/dev/2023/07/13/what-flutter-packages-what-could-i-use-for-unique-device-identifier/
