【发布时间】:2021-04-14 18:56:07
【问题描述】:
我有一个对象通过 json POST 请求获取参数以在数据库中创建一个新条目,我收到此错误:
"类型定义错误:[简单类型,类 javax.servlet.http.HttpServletRequest];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:不能 构造
javax.servlet.http.HttpServletRequest的实例(没有 创建者,如默认构造函数,存在):抽象类型要么需要 映射到具体类型,具有自定义反序列化器,或包含 [Source: (PushbackInputStream); 处的其他类型信息\n线: 1、栏目:1]
来自 POST 请求的请求
{
"email": "user@gmail.com"
}
这是控制器
@PostMapping("/forgot_password")
public ResponseEntity<?> processForgotPassword(@RequestBody HttpServletRequest request, Model model, User user) {
String email = (String) request.getAttribute(user.getEmail());
String token = RandomString.make(30);
try {
userService.updateResetPasswordToken(token, email);
String resetPasswordLink = Utility.getSiteURL(request) + "/reset_password?token=" + token;
sendEmail(email, resetPasswordLink);
model.addAttribute("message", "We have sent a reset password link to your email. Please check.");
} catch (ResourceNotFoundException ex) {
model.addAttribute("error", ex.getMessage());
} catch (UnsupportedEncodingException | MessagingException e) {
model.addAttribute("error", "Error while sending email");
}
return ResponseEntity.ok("Reset link sent Successfully");
}
服务
public class UserService {
@Autowired
private UserRepository userRepository;
public void updateResetPasswordToken(String token, String email) throws ResourceNotFoundException {
User user = userRepository.findByEmail(email);
if (user != null) {
user.setResetPasswordToken(token);
userRepository.save(user);
} else {
throw new ResourceNotFoundException("Could not find any user with the email " + email);
}
}
【问题讨论】:
-
尝试删除@RequestBody
-
请注意,您应该几乎从不实际操纵
HttpServletR*; Spring 为您处理所有令人讨厌的管道。在您的情况下,您可能应该使用@ModelAttribute String email。