@找不到由以下原因导致的有效@RequestBody给定:javax.el.ELException:Provider com.sun.el.ExpressionFactoryImpl

@找不到由以下原因导致的有效@RequestBody给定:javax.el.ELException:Provider com.sun.el.ExpressionFactoryImpl,java,spring,validation,Java,Spring,Validation,我面临着一个关于Spring验证的奇怪问题。我正在尝试使用集成测试验证SpringAnotion的bean。然而,下面是我在不同的实现中面临的问题 1)当我尝试@Valid@RequestBody TaskApprovalDetails TaskApprovalDetails(TaskApprovalDetails是我的bean)时,我得到以下异常 原因:javax.el.ELException:Provider com.sun.el.ExpressionFactoryImpl未找到 位于jav

我面临着一个关于Spring验证的奇怪问题。我正在尝试使用集成测试验证SpringAnotion的bean。然而,下面是我在不同的实现中面临的问题

1)当我尝试@Valid@RequestBody TaskApprovalDetails TaskApprovalDetails(TaskApprovalDetails是我的bean)时,我得到以下异常

原因:javax.el.ELException:Provider com.sun.el.ExpressionFactoryImpl未找到 位于javax.el.FactoryFinder.newInstance(FactoryFinder.java:101) 位于javax.el.FactoryFinder.find(FactoryFinder.java:197) 位于javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:197) 位于javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:168) 位于org.hibernate.validator.internal.engine.messageinterpolation.InterpolationTerm.(InterpolationTerm.java:59)

2)当我尝试@Valid@ModelAttribute(“taskApprovalDetails”)taskApprovalDetails taskApprovalDetails时,我没有得到任何异常。我可以访问我的控制器,但taskApprovalDetails对象中的所有属性都为空@ModelAttribute无法将我的请求json映射到objet

下面是一些示例代码:

控制器:

@RequestMapping(value = "/{taskId}/{customerId}/accept", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(OK)
public void acceptTask(@PathVariable String taskId, @PathVariable String customerId, @RequestParam("user") String user,
                    @Valid @ModelAttribute("taskApprovalDetails") TaskApprovalDetails taskApprovalDetails) throws URISyntaxException, ParseException {
        inboxService.acceptTask(taskApprovalDetails, user, taskId, customerId);
}

@RequestMapping(value = "/{taskId}/{customerId}/accept", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(OK)
public void acceptTask(@PathVariable String taskId, @PathVariable String customerId, @RequestParam("user") String user,
               @Valid @RequestBody TaskApprovalDetails taskApprovalDetails) throws URISyntaxException, ParseException {
        inboxService.acceptTask(taskApprovalDetails, user, taskId, customerId);
}   
json

public static String mockJsonRequestBody(final String customerId, final String role) {
     return "{\"comments\":\"Click\",\"role\":\"User\",\"userId\":\"asdasdasd\"}";
}
TaskApprovalDetails.class

@JsonInclude(NON_NULL)
public class TaskApprovalDetails {

    private int rowId;
    private String role;
    @NotBlank
    @Size(min=20, max = 25)
    private String userId;
    private Date taskCreatedDate;
    private Date taskCompletedDate;
    private String decision;
    private BigDecimal level;
    @Size(min = 20, max = 25, message = "Comments can be between 20-25 char only.")
    private String comments;
    private String rejectedSection;
    private List<String> businessRestriction;
@JsonInclude(非空)
公共类TaskApprovalDetails{
私有内部rowId;
私有字符串角色;
@不空白
@尺寸(最小值=20,最大值=25)
私有字符串用户标识;
私有日期任务创建日期;
私人日期任务完成日期;
私有字符串决策;
私有大十进制级别;
@大小(最小值=20,最大值=25,message=“注释只能在20-25个字符之间。”)
私有字符串注释;
私有字符串拒绝部分;
私人上市业务限制;

请建议我哪种方法是验证bean的最佳方法。@ModelAtrubute或@RequestBody,以及如何解决上述问题。

1.类路径上是否有json库?(是否将其添加到pom.xml中?)2.如果您使用的是html表单中的“普通”POST,则可以使用ModelAttribute—如果使用的是json@RequestBody@freakman:谢谢您的回复。是的,我在pom中添加了json库。我尝试了一件事:在我的模型@NotBlank中添加默认消息(message=“USERID\u CANNOT\u BE\u BLANK”)私有字符串userId;并且我的测试正在使用@RequestBody执行。我没有在..异常中找到com.sun.el.ExpressionFactoryImpl。知道它为什么在没有degault消息的情况下失败吗?缺少任何特定的依赖项吗?1.类路径上有json库吗?(它是否添加到pom.xml中?)2.如果您使用的是html表单中的“普通”POST,则可以使用ModelAttribute—如果使用的是json@RequestBody@freakman:谢谢您的回复。是的,我在pom中添加了json库。我尝试了一件事:在我的模型@NotBlank中添加默认消息(message=“USERID\u CANNOT\u BE\u BLANK”)私有字符串userId;并且我的测试正在使用@RequestBody执行。我没有在..异常中找到com.sun.el.ExpressionFactoryImpl。知道为什么它在没有degault消息的情况下失败吗?缺少任何特定的依赖项?
@JsonInclude(NON_NULL)
public class TaskApprovalDetails {

    private int rowId;
    private String role;
    @NotBlank
    @Size(min=20, max = 25)
    private String userId;
    private Date taskCreatedDate;
    private Date taskCompletedDate;
    private String decision;
    private BigDecimal level;
    @Size(min = 20, max = 25, message = "Comments can be between 20-25 char only.")
    private String comments;
    private String rejectedSection;
    private List<String> businessRestriction;