2015-04-22 1 views
3

У меня есть ресурс POJO, который определяет некоторые конечные точки HTTP и возвращает Dropwizard Views. Некоторые из этих конечных точек просто выполняют действие (например, обновляют db), а затем перенаправляют пользователя на другую конечную точку. Например, пользователь находится в месте GET /foo и отправляет форму. Это направляет их в конечную точку POST /foo/submit, их обработка обрабатывается, а затем пересылает их до GET /foo/done. Это предотвращает повторную отправку формы, если они обновляют страницу, например. Эта пересылка в настоящее время выполняется с помощью метода Response.seeOther() Джерси (возврат ответа вместо представления).Как перенаправить пользователя и передать сообщение на целевую страницу с помощью Jersey и Dropwizard?

Что бы я хотел, чтобы сделать, когда метод обработки обрабатывает их представление, генерирует какое-то сообщение (сообщение об ошибке, предупреждение, успешное и т. Д.) И передает это сообщение на страницу, которую мы пересылаем. Например, в GET /foo/done, я хотел бы, чтобы он сказал в верхней части страницы, «Подача завершена!» или «Представление не выполнено, потому что ...».

Я сделал несколько поисков, и многие люди предлагают бросить исключение WebApplicationException, за исключением того, что не все мои случаи являются ошибками. Иногда я хотел бы просто подтвердить подтверждение успешного действия. Но я не могу понять, как получить метод приема для получения сообщения. Я сделал это раньше в Python, имея способ обработки, который принимает необязательный словарь, но, к сожалению, я нахожусь на Java 7, поэтому у меня нет возможности предоставлять методы опциональным параметрам со значениями по умолчанию.

Благодарим за помощь.

ответ

2

Перенаправления просто отправят запросы GET. Запрос GET не должен иметь никакого органа. Чтобы отправлять произвольные данные с помощью запросов GET, просто отправьте их в строку запроса (конечно, здесь не должно быть никакой конфиденциальной информации). Например

@Path("foo") 
public class FooResource { 

    @GET 
    @Path("done") 
    public String getDone(@QueryParam("message") String message) { 
     return message; 
    } 

    @POST 
    @Path("submit") 
    public Response postData() { 
     String message = UriComponent.encode(
       "You have perefected submitting!", 
       UriComponent.Type.QUERY_PARAM_SPACE_ENCODED); 
     return Response.seeOther(URI.create("/api/foo/done?message=" + message)).build(); 
    } 
} 
+0

Спасибо за помощь! Не идеальное решение, но оно работает. Было бы лучше, если бы я мог передать объект, который скрыт от пользователя (например, не в строке url). Разве это вообще невозможно? – tytk

+0

Не знаю, о чем я знаю. Чтобы он был чище, вы всегда можете отправить что-то вроде числа, которое не имеет никакого значения для внешнего мира, но получает сопоставление с чем-то на принимающей стороне –

Смежные вопросы