[英]Passing a DTO and other values in @RequestBody in Spring
我想要使用 spring 中的 @RequestBody 傳遞一個 dto 和另一個值。 如下所示,(這是我的 controller 代碼)
public User createUser( @RequestBody @Validated UserDto userDto,@RequestBody Integer roleId ){
return userService.createUser(userDto.getUsername(), userDto.getEmail(), userDto.getPassword(),roleId);
}
下面是我通過郵寄電話發送的 json。
{
"username": "usernameABC",
"email" : "abc@gmail.com",
"emailRepeat" : "abc@gmail.com",
"password" : "asdasd",
"passwordRepeat" : "asdasd",
"roleId" : 1
}
是否有可能做到這一點? 還是我必須在 dto 本身中包含roleId ?
您必須在 DTO 中包含 roleId。 @RequestBody 將 json 綁定到一個 Object 中。 看到這個帖子。
您應該創建一個具有與JSON匹配的屬性的POJO,然后一切都會變得更加容易,因為spring知道如何轉換數據。 您在數據庫層中不需要任何@RequestBody內容。 將這些東西保留在控制器中。 您的數據庫層應該只接受POJO來持久化,甚至不知道它是否來自請求。 例如可以是測試用例。
這是我的方法:
@RequestMapping(value = API_PATH + "/signup", method = RequestMethod.POST)
@OakSession
public @ResponseBody SignupResponse signup(@RequestBody SignupRequest req) {
logRequest("signup", req);
SignupResponse res = new SignupResponse();
userManagerService.signup(req, res, false);
return res;
}
從這里拍攝:(我的項目)
嘗試這個
public User createUser( @RequestBody @Validated UserDto userDto,@RequestParam Integer roleId ){
return userService.createUser(userDto.getUsername(), userDto.getEmail(), userDto.getPassword(),roleId);
}
用於從url傳遞值使用localhost:8085/user/user-api?roleId =45632
json
{ "username": "usernameABC", "email" : "abc@gmail.com", "emailRepeat" : "abc@gmail.com", "password" : "asdasd", "passwordRepeat" : "asdasd", }
要么
您還可以將roleId添加到您的UserDto類中
如果您正在使用Maven,則在Maven中包含以下依賴項-如果您未使用Maven,請下載此jar並將其放在classpath
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
然后,在您的controller
中,使用需要發送的值在org.json jar中創建JSONObject,如下所示-
JSONObject json=new JSONObject();
json.put("username",dto.getUSerName());
json.put("roleId",yourRoleIdValue);
return json.toString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.