我正在尝试使用cURL将POST请求发送到我的本地应用程序:
host="http://localhost:8080"
$(curl -s -X POST -H "Content-Type: application/json" -d '{"name":"Test", "description":"Test"}' $host/games/new?user_id=c13fb734-c72a-48a0-9fd7-5fbc79c6285a)
我的控制器:
@RequestMapping("games")
@RestController
public class GameController {
private static final String ROOT_URL = ServerConfig.GAMES_HOST + "/games";
@PostMapping(value = "new")
public ResponseEntity<String> add(@RequestParam("user_id") UUID userId,
@RequestBody String newGame) {
String url = ROOT_URL + "/new?userId=" + String.valueOf(userId);
RestTemplate template = new RestTemplate();
return template.postForEntity(url, newGame, String.class);
}
}
但是在春天我遇到了错误:
{"errors":["user_id should be of type java.util.UUID"],"status":"BAD_REQUEST","message":"Failed to convert value of type 'java.lang.String' to required type 'java.util.UUID'; nested exception is java.lang.IllegalArgumentException: Invalid UUID string: new"}
即。 cURL将new
作为user_id
的值发送。
错误在哪里?
答案 0 :(得分:1)
长话短说,概念上,@RequestParam
和@RequestBody
是互斥的:查询参数(@RequestParam
)作为请求正文发送。
请在此处查看其他详细信息:
目前,有两种选择:
@RequestParam
):将每个参数(即每个JSON属性)作为查询参数传递。仅限于请求正文(@RequestBody
),例如:
user_id
参数除外。参数可以设为@PathVariable
,@RequestMapping
应使用适当的占位符来引用它。