クライアントが 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 が返されます。調子はどう?