我有一个使用平针织物的休息终点,我在DTO中“删除”有效负载,其中包含ENUM类型的字段。
public enum AdminStatus {
ACTIVE, NONACTIVE;
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class AdminUpdateDTO {
@XmlElement(nillable = false, required = true)
private AdminStatus status;
public AdminStatus getStatus() {
return status;
}
public void setStatus(AdminStatus status) {
this.status = status;
}
@Override
public String toString() {
return "[status=" + this.getStatus() + "]";
}
}
当我给这个字段一个与现有ENUM值不匹配的值并发出请求时,我得到了这个:
无法从字符串值'ACTIVEE'构造com.utility.AdminStatus的实例: 值不是声明的枚举实例名称之一:[NONACTIVE,ACTIVE]
在[来源:org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@2848cd9d; line:1,column:328](通过参考链:com.dto.AdminUpdateDTO [“status”])
泽西岛是否有能力以某种方式处理这个问题,我的意思是,我不想将此作为响应而是一些自定义错误响应。
答案 0 :(得分:3)
这是Jackson提供程序异常映射器的默认行为:将异常消息作为响应返回。如果您需要JsonMappingException
JsonParseException
和@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {
@Override
public Response toResponse(JsonMappingException exception) {
return Response.status(Response.Status.BAD_REQUEST)
.entity("Boo..").type("text/plain").build();
}
}
@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
@Override
public Response toResponse(JsonParseException exception) {
return Response.status(Response.Status.BAD_REQUEST)
.entity("Boo...").type("text/plain").build();
}
}
,请提及create your own mappers。
这里有几个例子
Boo...
此处的回复只是@Provider
。您需要确保这些映射器已注册。如果您正在使用扫描,则应从DataTable
注释中选择该类。否则,无论您注册资源和提供商,都需要手动注册。