Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Spring中处理JSON时,是否有可能获得InvalidFormatException而不是HttpMessageNodeTableException?_Json_Spring - Fatal编程技术网

在Spring中处理JSON时,是否有可能获得InvalidFormatException而不是HttpMessageNodeTableException?

在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:

@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
注释。