我希望在春天使用@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 吗?
答案 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;
}
从这里采取:(我的项目)
答案 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();