在Spring中处理JSON时,是否有可能获得InvalidFormatException而不是HttpMessageNodeTableException?
我有一个简单的RestController:在Spring中处理JSON时,是否有可能获得InvalidFormatException而不是HttpMessageNodeTableException?,json,spring,Json,Spring,我有一个简单的RestController: @RestController public class MailboxController{ @RequestMapping(value = "/mailbox/{id}", method = RequestMethod.PUT) public void createMailbox(@PathVariable @NotNull String mailboxID, @Validated @RequestBody Mailbox mai
@RestController
public class MailboxController{
@RequestMapping(value = "/mailbox/{id}", method = RequestMethod.PUT)
public void createMailbox(@PathVariable @NotNull String mailboxID, @Validated @RequestBody Mailbox mailbox){
//do something with Mailbox here
}
}
邮箱类如下所示:
@Validated
public class Mailbox{
@JsonProperty("email")
@EmailValidator //some validation of EMail String
public String email;
@JsonProperty("type")
public Type type; //Type is an enum
}
如果我发布了一个有效的JSON字符串,其中type
的值未在枚举中列出,那么我会得到一个400(错误请求)错误。在内部,将抛出一个带有无效格式异常的httpmessageradableexception
。如果我发布了一个JSON字符串,其中电子邮件没有被EmailValidator接受,那么我也会收到一个400(错误请求)错误(来自MethodArgumentNotValidException
)。在这两种情况下,我都希望使用422,因为JSON格式良好,但内容在语义上是错误的
无论采用哪种方法,我都会尝试相似地处理这两种情况,并想知道是否有一种方法可以重定向InvalidFormatException
,当给定的type
不是type
枚举的一部分时,我会得到MethodArgumentNotValidException
目前,我有一个
ResponseEntityExceptionHandler
,其中一个方法捕获HttpMessageTreadableException
,并根据引发异常的原因构建ResponseEntity
,另一个方法处理MethodArgumentNotValidException
。如果InvalidFormatException
也可以用我处理MethodArgumentNotValidException
的方法来处理,我更愿意这样做。检查这个答案@J-Alex这个答案看起来更干净。所以我会在家里检查一下。但由于它还需要一些时间来检查并正确理解它,我将继续使用我们当前的解决方案,即我们得到了一个扩展ResponseEntityExceptionHandler
的类,并将根据需要单独处理异常,部分重写基类中的方法,部分使用@ExceptionHandler
注释。检查此答案@J-Alex此答案看起来更干净。所以我会在家里检查一下。但由于它还需要一些时间来检查并正确理解它,我将继续使用我们当前的解决方案,即我们得到了一个扩展ResponseEntityExceptionHandler
的类,并将根据需要单独处理异常,部分重写基类中的方法,部分使用@ExceptionHandler
注释。