与实体对象一起使用时,ResponseBuilder不起作用

时间:2017-01-23 09:32:26

标签: java jax-rs response

我正在尝试使用responsebuilder创建响应。 当我在实体中传递字符串时,它工作正常,但是当我传递一些错误类时,它不起作用。

这是代码

1)工作正常

Option Explicit

Public Sub Test()

    Debug.Print CompareMe("Japan;US", "US;Japan")
    Debug.Print CompareMe("abcefg", "efgabc")
    Debug.Print CompareMe("abcefg", "e1fgabc")
    Debug.Print CompareMe("vit", "vitt")

End Sub

Public Function CompareMe(str1 As String, str2 As String) As Boolean

    Dim varStr1             As Variant
    Dim varStr2             As Variant

    ReDim varStr1(Len(str1))
    ReDim varStr2(Len(str2))

    varStr1 = StrToArray(str1)
    varStr2 = StrToArray(str2)

    Call BubbleSort(varStr1)
    Call BubbleSort(varStr2)

    CompareMe = (Join(varStr1, "") = Join(varStr2, ""))

End Function

Public Sub BubbleSort(ByRef list As Variant)

    Dim First           As Long
    Dim Last            As Long
    Dim i               As Long
    Dim j               As Long
    Dim Temp            As String

    First = LBound(list)
    Last = UBound(list)

    For i = First To Last - 1
        For j = i + 1 To Last
            If list(i) > list(j) Then
                Temp = list(j)
                list(j) = list(i)
                list(i) = Temp
            End If
        Next j
    Next i

End Sub

Public Function StrToArray(str As String) As Variant

    Dim buff()      As String
    Dim i           As Long

    ReDim buff(Len(str) - 1)

    For i = 1 To Len(str)
        buff(i - 1) = Mid$(str, i, 1)
    Next

    StrToArray = buff

End Function

2)不工作

Response.status(400).entity("test").build();

上面的代码我收到错误

Response.status(400).entity(new MyCustomExceptions(400,"My bad request")).build();

当我使用上面的代码调用此服务时,我得到500错误而不是400.但是在第一种情况下我得到了正确的400错误。

  • 只是想了解我是否将对象传递给实体然后我需要 覆盖MyCustomExceptions类中的一些方法?
  • 如何从MyCustomExceptions对象创建响应?
  • 如果我将字符串传递给实体,它可以正常工作。为什么?

2 个答案:

答案 0 :(得分:2)

将异常映射到HTTP错误响应

JAX-RS允许您定义Java异常到HTTP错误响应的直接映射。

通过扩展WebApplicationException,您可以创建特定于应用程序的异常,这些异常使用状态代码和可选消息构建HTTP响应,作为响应的主体。

考虑到这一点,您可以抛出一个扩展ResponseBadRequestException而不是返回WebApplicationException,而是将其映射到状态代码为{{3}的HTTP响应}:

throw new BadRequestException("My bad request");

有关JAX-RS中错误处理的更多详细信息,请参阅此400

WebApplicationException

的子类

为方便起见,answer目前通过以下例外进行扩展(可以扩展它们以创建自己的例外):

答案 1 :(得分:1)

您传递的HTTPHeader中accept参数的值是多少?看起来像text/plain,你正试图返回一个对象。

  1. 在请求中将accept值作为application/json传递。 OR
  2. 更改代码以响应添加类型Json/XML

    Response.status(400).type(MediaType.APPLICATION_JSON).entity(new MyCustomExceptions(400,"My bad request")).build();