我有一个弹簧休息终点,它接受一个用户对象并返回另一个用户对象作为响应。我的控制器方法如下所示:
@PostMapping
public UserResponse createUser(@RequestBody UserDetailsRequestModel userDetails)
throws Exception {
UserRest userResponse= new UserRest();
ModelMapper modelMapper = new ModelMapper();
UserDto userDto = modelMapper.map(userDetails, UserDto.class);
userDto.setRoles(new HashSet<>(Arrays.asList(Roles.ROLE_USER.name())));
UserDto createdUser = userService.createUser(userDto);
returnValue = modelMapper.map(createdUser, UserResponse.class);
return userResponse;
}
我的userResponse类看起来像
public class UserRest {
private String userId;
private String firstName;
private String lastName;
private String email;
....getters and setters
而且此流程运行良好。但是现在我需要向createUser方法(JSR 303)添加验证,以检查传入的JSON字段是否正确。为此,我试图在控制器中添加以下代码
@PostMapping
public UserResponse createUser(@Valid @RequestBody UserDetailsRequestModel userDetails, BindingResult result){
if(result.hasErrors()){
Map<String, String> errorMap = new HashMap<>();
for(FieldError error: result.getFieldErrors()){
errorMap.put(error.getField(), error.getDefaultMessage());
}
**return new ResponseEntity<Map<String, String>>(errorMap, HttpStatus.BAD_REQUEST);**
}
UserRest userResponse= new UserRest();
ModelMapper modelMapper = new ModelMapper();
UserDto userDto = modelMapper.map(userDetails, UserDto.class);
userDto.setRoles(new HashSet<>(Arrays.asList(Roles.ROLE_USER.name())));
UserDto createdUser = userService.createUser(userDto);
returnValue = modelMapper.map(createdUser, UserResponse.class);
return **userResponse**;
我的代码中明显的问题是我无法从ResponseEntity <Map <String,String >>转换为UserResponse对象。
有适当的方法吗?这样我就可以发送错误(如果有的话)或UserResponse对象(如果同一控制器方法中没有错误)?
返回类型为ResponseEntity <?>
@PostMapping
public ResponseEntity<?> createUser(@Valid @RequestBody UserDetailsRequestModel userDetails, BindingResult result){
if(result.hasErrors()){
...
return ResponseEntity.badRequest().body(errorMap);
}
...
return ResponseEntity.ok(userRequest);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句