在Spring中传递@RequestBody中的DTO和其他值

时间:2017-11-25 05:30:43

标签: java spring rest

我希望在春天使用@RequestBody传递一个dto和另一个值。如下所示,(这是我的控制器代码)

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 吗?

3 个答案:

答案 0 :(得分:0)

您应该创建一个具有与您的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

答案 1 :(得分:0)

试试这个

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", }

OR

您还可以将roleId添加到UserDto类

答案 2 :(得分:0)

如果您正在使用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();