Сериализация Micronaut JSON — используйте геттеры вместо полей

#java #jackson #micronaut

#java #джексон #micronaut

Вопрос:

При использовании Spring MVC, по умолчанию, всякий раз, когда ваши @RestControllers возвращают объект, он будет сериализован в JSON на основе его геттеров, а не его полей.

Могу ли я каким-либо образом настроить Micronaut на подобное поведение? Пример:

 public class User {

  private String email;
  private String password;

  public String getEmail() {
    return email;
  }

}

@Controller
public class UserController {

  public User getUser() {
    ...
  }

}
 

Так что это должно вернуть:

 {
  "email": "email@addres.com"
}
 

вместо этого:

 {
  "email": "email@addres.com",
  "password": "pass"
}
 

Однако я знаю об аннотациях Джексона, я просто пытаюсь понять, можно ли настроить Micronaut на подобное поведение.

Спасибо.

Комментарии:

1. micronaut Использует ли отражение? Как это работает

2. Спасибо, что поделились этим. Я не думаю, что это связано с вопросом, поскольку это объясняет, что определения компонентов не зависят от отражения. Я явно неправильно сформулировал свой вопрос: на самом деле, чего я пытаюсь добиться, так это настроить jackson на использование геттеров вместо полей. Я только что обновил вопрос.

3. Хорошо, но ваш пример выдает точный json, как вы описываете… вы пропускаете только @Get на своей конечной точке

4. Не совсем. В приведенном мной примере пароль также сериализуется.

5. Действительно? Без геттера этого не должно быть… И это не сработает, если я попытаюсь.

Ответ №1:

Он должен работать так, как ожидалось, он не должен отображать пароль. Поля не отображаются, если нет геттера (пароля).

Запуск проекта без каких-либо функций: запуск micronaut

Затем

 import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.runtime.Micronaut;

public class Application {

    public static void main(String[] args) {
        Micronaut.run(Application.class, args);
    }
}

class User {
    String email;
    String password;

    public User(String email,String password) {
        this.email = email;
        this.password = password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }
}

@Controller
class UserController {

    @Get
    public User getUser() {
        return new User("email@micronaut.io","secret");
    }

}
 

http://localhost:8080 результаты в:

 {
"email": "email@address.com"
}
 

Комментарии:

1. Ну, тоже не уверен, что произошло. Я только что восстановил проект с помощью запуска, и теперь он работает так, как ожидалось. Спасибо за ваше время.