2017-08-24 84 views
0

我有以下REST端點:JAX-RS 2.0時存在JSON請求無效的屬性類型不拋出異常

@Stateless 
@Path("test") 
public class TestResource { 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public TestDTO test(TestDTO dto) { 
     return dto; 
    } 
} 

的TestDTO bean是非常簡單的:

public class TestDTO { 
    private String id; 
    private Integer number; 
// + getter/setter 
} 

如果我發佈以下JSON,響應將完全相同(如此平凡示例中的預期):

{ 
"id": "abc", 
"number": 123 
} 

但是如果我的「數字」發送一個字符串值:

{ 
"id": "abc", 
"number": "NotANumber" 
} 

服務器根本不會初始化我TestDTO(值= NULL)和我的反應數目變量將是以下幾點:

{ 
    "id": "abc" 
} 

我不明白... 爲什麼服務器沒有迴應「400 - 錯誤的請求」? :/

這個代碼在WebLogic應用程序服務器版本12.2.1.1.0所提供新澤西實施運行(我只有一個依賴於我的pom.xml:JavaEE的-API版本7.0)

+0

它可能會越來越初始化爲'null',自'number'已初始化爲'null',當轉換爲它必須被忽略'JSON'。你有沒有試過檢查這個選項? –

+0

是的,如果我在回報中放置了一個斷點,那麼「數字」被初始化爲空。但是,這不是我預期的行爲,我認爲...我應該收到400錯誤的請求,而不是 – koD

+0

所以基本上,它試圖將JSON值「NotANumber」轉換爲Java整數,當然它不能但拋出一個異常,它會繼續......所以我不能知道我的客戶端是否不給我發送號碼,或者他是否給我發錯了...... – koD

回答

0

好了,所以.. 。不拋出任何異常是默認選擇MOXy--所有Oracle產品(Glassfish和WebLogic)(而不是Jackson)的新默認JAX-RS Json提供程序。 這對我來說似乎很陌生...但是我們必須處理它:/

我們必須爲此目的註冊一個ValidationErrorHandler。

我發現了一個完整的(和工作)解決方案在那裏: Custom MOXyJsonProvider in Jersey 2 not working?

相關問題