簡體   English   中英

在 Spring 中的 @RequestBody 中傳遞 DTO 和其他值

[英]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;
}

從這里拍攝:(我的項目)

https://github.com/Clay-Ferguson/meta64/blob/master/src/main/java/com/meta64/mobile/AppController.java

嘗試這個

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM