java Spring数据Rest Bean验证未应用于PUT方法?
我有一个定义如下的域类
@Data
@Entity
public class City {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long cityID;
@NotBlank(message = "City name is a required field")
private String cityName;
}
当我在没有cityName的情况下发布到端点http://localhost:8080/cities
时,我会得到一个ConstraintViolationException,但当我在没有cityName的情况下向端点http://localhost:8080/cities/1
发送PUT请求时,我会得到以下异常,而不是ConstraintViolationException
{
"timestamp": 1494510208982,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.transaction.TransactionSystemException",
"message": "Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction",
"path": "/cities/1"
}
那么,如何为PUT请求获取ConstraintViolationException异常呢
注意:我使用的是Spring数据Rest,因此端点由Spring生成。没有自定义的rest控制器
# 1 楼答案
我的解决方法是设置一个异常处理程序来处理
TransactionSystemException
,打开异常并像普通的ConstraintViolationException
一样处理:# 2 楼答案
我认为Cepr0对PUT和POST都进行了测试,因为当您为不存在的实体发送PUT请求时,SpringDataREST在后台使用create方法。 假设没有id=100的用户: 调用“PUT users/100”与调用“POST users/”相同
当您为现有实体发送PUT时,它将生成讨厌的TransactionSystemException
我现在也在与数据Rest异常处理作斗争,其中有很多不一致之处
这是我当前的RestErrorAttributes类,它解决了我的大部分问题,但我很有可能在接下来的日子里喜欢上其他人。:)
}