Java 与spring framework错误的预期类型不匹配
我有一个基于spring框架的服务 我想知道为什么我有这个例外,虽然我发送一个整数到我的服务 错误[io.undertow.request](默认任务-13)UT005023:异常 处理发送至/updateUserAnswer/11的请求: org.lightadmin.core.view.exceptions.BadRequestException: org.springframework.web.util.NestedServletException:请求 处理失败;嵌套异常是 java.lang.IllegalArgumentException:参数值[11]不匹配 预期类型[java.lang.Integer(不适用)] 这是我的控制器Java 与spring framework错误的预期类型不匹配,java,spring,Java,Spring,我有一个基于spring框架的服务 我想知道为什么我有这个例外,虽然我发送一个整数到我的服务 错误[io.undertow.request](默认任务-13)UT005023:异常 处理发送至/updateUserAnswer/11的请求: org.lightadmin.core.view.exceptions.BadRequestException: org.springframework.web.util.NestedServletException:请求 处理失败;嵌套异常是 java.l
@RequestMapping(value = "/updateUserAnswers/{userId}", method = RequestMethod.PUT)
public Response updateUserAnswer(@PathVariable("userId") Long userId,
@RequestBody @Valid UserAnswer userAnswer) {
userAnswerService.updateUserAnswer(userId, userAnswer);
HashMap<String, Object> response = new HashMap<>();
response.put("messages", null);
response.put("success", Boolean.valueOf(true));
return Response.instance().friendlyName("user-answer-updated").object(response).statusCode(HttpStatus.OK);
}
@RequestMapping(value=“/updateUserAnswers/{userId}”,method=RequestMethod.PUT)
公共响应updateUserAnswer(@PathVariable(“userId”)长userId,
@RequestBody@Valid UserAnswer UserAnswer){
updateUserAnswerService.updateUserAnswer(用户标识,用户应答);
HashMap响应=新建HashMap();
response.put(“messages”,null);
response.put(“success”,Boolean.valueOf(true));
返回Response.instance();
}
这是我的服务:
public void updateUserAnswer(Long userId,UserAnswer userAnswer) {
List<UserAnswer> currentUserAnswer = userAnswerRepo.getUserAnswers(userId, userAnswer.getAnswerId().longValue(),null);
currentUserAnswer.get(0).setLabel(userAnswer.getLabel());
List<UserAnswerField> fieldsList = new ArrayList<UserAnswerField>();
for (UserAnswerField userAnswerField : userAnswer.getAnswerFields()) {
UserAnswerField currentUserAnswerField = userAnswerFieldRepo.getUserAnswerField(userAnswerField.getfieldId());
if (currentUserAnswerField != null) {
currentUserAnswerField.setfield(userAnswerField.getfield());
currentUserAnswerField.setTypeId(userAnswerField.getTypeId());
fieldsList.add(currentUserAnswerField);
//userAnswerFieldRepo.save(currentUserAnswerField);
}
}
currentUserAnswer.get(0).setAnswerFields(fieldsList);
userAnswerRepo.save(currentUserAnswer.get(0));
}
public void updateUserAnswer(长用户ID,UserAnswer-UserAnswer){
List currentUserAnswer=userAnswerRepo.getUserAnswers(userId,userAnswer.getAnswerId().longValue(),null);
currentUserAnswer.get(0.setLabel)(userAnswer.getLabel());
列表字段列表=新的ArrayList();
for(UserAnswerField UserAnswerField:userAnswer.getAnswerFields()){
UserAnswerField currentUserAnswerField=userAnswerFieldRepo.getUserAnswerField(UserAnswerField.getfieldId());
如果(currentUserAnswerField!=null){
currentUserAnswerField.setfield(userAnswerField.getfield());
currentUserAnswerField.setTypeId(userAnswerField.getTypeId());
fieldsList.add(currentUserAnswerField);
//userAnswerFieldRepo.save(当前useranswerfield);
}
}
currentUserAnswer.get(0).setAnswerFields(fieldsList);
userAnswerRepo.save(currentUserAnswer.get(0));
}
存储库:
public List<UserAnswer> getUserAnswers(Long userId,Long answerId ,String pageType) {
try {
String qlString = ""
+ " Select sf from UserAnswer sf "
+ " where "
+ " sf.userId = :userId ";
if(pageType != null){
qlString+= " and sf.type=:type ";
}
if(answerId != null){
qlString+= " and sf.answerId=:answerId ";
}
qlString+=" order by sf.insertionDate";
Query query = getEntityManagerFactory().createQuery(qlString);
query.setParameter("userId", userId);
if(pageType != null){
query.setParameter("type", pageType);
}
if(answerId != null){
query.setParameter("answerId", answerId);
}
return (List<UserAnswer>) query.getResultList();
} catch (javax.persistence.NoResultException e) {
return null;
}
}
public List getUserAnswers(长userId、长answerId、字符串pageType){
试一试{
字符串qlString=“”
+“从用户应答sf中选择sf”
+“哪里”
+“sf.userId=:userId”;
如果(页面类型!=null){
qlString+=“和sf.type=:type”;
}
if(answerId!=null){
qlString+=“和sf.answerId=:answerId”;
}
qlString+=“按sf.insertionDate排序”;
Query Query=getEntityManagerFactory().createQuery(qlString);
setParameter(“userId”,userId);
如果(页面类型!=null){
query.setParameter(“类型”,页面类型);
}
if(answerId!=null){
setParameter(“answerId”,answerId);
}
return(List)query.getResultList();
}catch(javax.persistence.noresulte){
返回null;
}
}
你能帮我吗?提前感谢您会得到一个异常,因为您需要绑定一个基元类型 试试这个:
public Response updateUserAnswer(@PathVariable("userId") long userId,
@RequestBody @Valid UserAnswer userAnswer) { [...] }
错误发生在
query.setParameter(“userId”,userId)代码>因为当hqlQuery需要整数时,您试图设置一个Long
解决方案:
- 将类型
Long
->Integer
从控制器更改为存储库
- 使用
.intValue()
(与其说是解决方案,不如说是快速修复)
- 将实体中的ID更改为长类型
请向您显示URL。当方法需要很长时间时,为什么预期的类型是整数?@StanislavL我编辑了我的问题并添加了服务代码,我认为这就是错误发生的地方。如果在控制器updateUserAnswer(@PathVariable(“userId”)中更改为整数,会发生什么情况Integer userId,我认为错误发生在服务层,我编辑了问题并添加了itI,这会让我感到惊讶。异常是explicit。参数与预期不匹配。在调用服务之前放置一个调试断点。我认为您的代码永远不会停止。我添加了一个打印,它确实到达了服务,所以控制器没有问题您知道您的服务到底在哪里抛出异常吗?我认为您的服务中的函数可能期望一个整数作为参数,但您给出了一个Long。好的,因此错误发生在这一行:List currentUserAnswer=userAnswerRepo.getUserAnswers(answerId,UserAnswerId.getAnswerId().longValue()),null);UserAnswer.answerId
类型为整数或长(在您的实体中)?UserAnswer.userId类型
为整数或长(在您的实体中)?在实体中它们都是int,错误正好发生在这一行:query.setParameter(“userId”,userId);@Daminox