#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. Ну, тоже не уверен, что произошло. Я только что восстановил проект с помощью запуска, и теперь он работает так, как ожидалось. Спасибо за ваше время.