【发布时间】:2021-01-23 00:23:50
【问题描述】:
我是 Java 新手,这个 noob 功能一直困扰着我。我已经下载了 sonarLint 和 lo,发现它把这个问题抛在了我的脸上方法的认知复杂性不应该太高。我知道它看起来很难看,但谁能指出我如何重新格式化以获得干燥的概念,并且也不像 SonarLint 提到的那样具有高复杂性。
@PostMapping("/adduser")
// @PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<MessageResponse> registerUser(@Valid @RequestBody SignupRequest signUpRequest) {
/*
* This controller Creates new user based on all the entities for the user
*
*/
if(dbValue)
{
if (repository.existsByUsername(signUpRequest.getUsername())) {
return ResponseEntity
.badRequest()
.body(new MessageResponse("Error: Username is already taken!"));
}
if (repository.existsByEmail(signUpRequest.getEmail())) {
return ResponseEntity
.badRequest()
.body(new MessageResponse("Error: Email is already in use!"));
}
// Create new user's account
User2 user = new User2(signUpRequest.getUsername(),
signUpRequest.getEmail(),
signUpRequest.getCustomername(),
signUpRequest.getCustomerid(),
signUpRequest.getDescription(),
encoder.encode(signUpRequest.getPassword()));
Set<String> strRoles = signUpRequest.getRoles();
Set<Role2> roles = new HashSet<>();
Role2 e = new Role2();
e.setName("ROLE_ADMIN");
roles.add(e);
user.setRoles(roles);
repository.save(user);
}
else {
if (repository.existsByUsername(signUpRequest.getUsername())) {
return ResponseEntity
.badRequest()
.body(new MessageResponse("Error: Username is already taken!"));
}
if (repository.existsByEmail(signUpRequest.getEmail())) {
return ResponseEntity
.badRequest()
.body(new MessageResponse("Error: Email is already in use!"));
}
// Create new user's account
User1 user = new User1(signUpRequest.getUsername(),
signUpRequest.getEmail(),
signUpRequest.getCustomername(),
signUpRequest.getCustomerid(),
signUpRequest.getDescription(),
encoder.encode(signUpRequest.getPassword()));
Set<String> strRoles = signUpRequest.getRoles();
Set<Role> roles = new HashSet<>();
if (strRoles == null) {
Role userRole = roleRepository1.findByName(URole.ROLE_USER)
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
roles.add(userRole);
} else {
strRoles.forEach(role -> {
switch (role) {
case "admin":
Role adminRole = roleRepository1.findByName(URole.ROLE_ADMIN)
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
roles.add(adminRole);
break;
default:
Role userRole = roleRepository1.findByName(URole.ROLE_USER)
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
roles.add(userRole);
}
});
}
user.setRoles(roles);
repository.save(user);
}
return ResponseEntity.ok(new MessageResponse("User Added successfully!"));
}
感谢批评和任何帮助。提前致谢。
【问题讨论】:
-
将重复的存在检查移出
if(dbValue)if 块(到方法的顶部)。那么该方法有两个明显独立的块。将if(dbValue)的每个分支的内容移动到两个单独的实用程序方法中。
标签: java spring-boot sonarlint