Как создать домашний интерфейс в службе отдыха швов, если домашний интерфейс имеет ссылку на пользователя?

Я занимаюсь разработкой своего первого приложения для Android и Seam + и столкнулся с некоторыми новыми сценариями, как и ожидалось.

Теперь специально для этого приложения я решил не сохранять никакого состояния, потому что, вероятно, от 80% до 90% обращений к серверу в службе REST будут специально выполнять простую синхронизацию, и клиент на некоторое время пропадет, поэтому есть (вероятно,) нет смысла сохранять какое-либо состояние на стороне сервера для этих вызовов.

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

Таким образом, есть некоторый код для иллюстрации.

Пользовательский интерфейс Home вводит пользователь Seam:

@Name("pesoHome")
public class PesoHome extends EntityHome<Peso> {

    private static final long serialVersionUID = 6087763635317971234L;

    @In
    User user;

Чем нам нужен сервис отдыха, который использует этот домашний интерфейс:

public class PesoRest{

    @Logger
    Log log;

    @In(create = true)
    UserPesquisa userPesquisa;

    @In(create = true)
    PesoHome pesoHome;

    @POST
    @Path("/cadastrar/{userEmail}")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response cadastraPeso(@PathParam("userEmail") String email, String jsonString)
    {
            String json = jsonString;
            System.out.println("String jSon no servidor ==>> " + json);

И чем из-за внедрения пользователя в домашнем интерфейсе во время выполнения возникает следующая ошибка:

Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: pesoHome
    at org.jboss.seam.Component.newInstance(Component.java:2144)
    ... 46 more
Caused by: org.jboss.seam.RequiredException: @In attribute requires non-null value: pesoHome.user

Обратите внимание, что в теле запроса объект JSon содержит информацию об этом пользователе, которая позволяет восстановить этого пользователя, используя также введенную ссылку userPesquisa. Я знаю, что у меня мог бы быть другой подход, в котором я собирал бы компонент шва без ссылок на пользователя, а затем собирал пользователя и помещал его в новый диалог, а затем вставлял нужную домашнюю ссылку, но...
Мне было интересно, что, вероятно, должен быть какой-то более стандартный подход для этого, поскольку это общий сценарий. Какие-либо предложения?:)

[] S

1 ответ

Решение

Как предложил Артур в комментариях к этой теме, я немного изменил код и теперь он работает:

PesoHome:

    @In(required=false)
    User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

а чем в ПесоРест:

User usuario = userPesquisa.pesquisaUsuarioPorEmail(email);
pesoHome.setUser(usuario);

И потому что теперь пользователь больше не требуется при создании, ошибка не вызывается, и я могу выполнить позднюю привязку после поиска в БД, чтобы восстановить правильного пользователя. Довольно простое решение. Спасибо Артур.

[] S

Другие вопросы по тегам