2

クライアントが POST を実行するとき、文字列パラメータに不正な文字がないか検証する必要があります。見つけたら、何が間違っていたかを示すメッセージを返す必要があります。通常、私は text/plain を使用しますが、顧客は、POST 要求から XML を取得する必要がある Oracle ツールを使用しています (図を参照)。

応答を作成するためのカスタム例外を作成しました。

public class RESTException extends WebApplicationException {
public RESTException(Response.Status status, String messageKey) {
    super(Response.status(status).entity("a messasge").type(MediaType.TEXT_PLAIN).build());
}
public RESTException(Response.Status status, String messageKey, boolean useEntity) {
    super(Response.status(status).entity(new CDSResponse(Integer.toString(status.getStatusCode()), PropertyFileAccessor.getInstance().getPropertyWithDefault(messageKey))).type(MediaType.APPLICATION_XML).build());
}

通常、エラーを作成するときに上記の最初のメソッドを実行しますが、エンティティを使用して XML を返す 2 番目のメソッドを作成しました。

エンドポインとして使用する方法は次のとおりです。

@POST
@Consumes({"application/assetId-v1+xml", "application/assetId-v1+json"})
@Produces({MediaType.APPLICATION_XML})
@Path("/{dealerCode}/{dcn}/{make}/{serialNumber}")
public Response postV1(AssetId assetId, @PathParam("dealerCode") String dealerCode, @PathParam("dcn") String dcn, @PathParam("make") String make, @PathParam("serialNumber") String serialNumber) {
    if (!StringUtils.isAlphanumeric(dealerCode)) {
        throw new RESTException(Status.BAD_REQUEST, "equipmentdata.400.invalid.dealer.code", true);
    }

質問/バグは次のとおりです。400 をスローすると、応答として次のようになります。

cat.dds.cds.model.CDSResponse@29626a

しかし、他のステータス コードをスローすると、xml が返されます。調子はどう?

4

1 に答える 1

0

私の解決策は簡単でした。400 を返さないでください。この特定のケースでは、Oracle ツールは 200 のみを受け入れるため、あまり安定していませんでした。したがって、すべてが 200 であり、応答 XML には実際のコードが含まれています。

于 2013-03-12T15:03:58.470 に答える