Как получить доступ к полезной нагрузке String json и сопоставить ее с контроллером покоя Object in Spring? - PullRequest
0 голосов
/ 20 сентября 2018

Я создаю API отдыха, используя службы отдыха Spring Boot.У меня есть класс Java:

class Person{
 int id;
 @notNull
 String name;
 @notNull
 String password;
 }

И я хочу создать API для создания объекта Person.Я получу POST-запрос с телом json, например:

{
"name":"Ahmad",
"password":"myPass",
"shouldSendEmail":1
}

Как вы можете видеть, есть дополнительное поле "shouldSendEmail", которое я должен использовать, чтобы узнать, отправлять ли мне электронное письмо или нет после того, как ясоздайте объект Person.Я использую следующий API:

@RequestMapping(value = "/AddPerson", method = RequestMethod.POST)
public String savePerson(
        @Valid @RequestBody Person person) {

     personRepository.insert(person);

    // Here I want to know if I should send an email or Not

    return "success";
}

Есть ли метод для доступа к значению "shouldSendEmail", когда я использую автоматическое отображение таким образом?

Ответы [ 4 ]

0 голосов
/ 20 сентября 2018

Есть много вариантов, которые вы решаете.Поскольку вы не хотите сохранять флаг shouldSendEmail, и вы можете добавить его в свой класс домена, вы можете использовать аннотацию @Transient, чтобы указать JPA пропустить сохранение.

@Entity
public class Person {

    @Id 
    private Integer id;

    @NotNull
    private String name;

    @NotNull
    private String password;

    @Transient
    private Boolean shouldSendEmail;

}

Если выМне нужна более гибкая персонализация сущностей, я рекомендую использовать DTO.

MapStruct - хорошая библиотека для работы с DTO

.
0 голосов
/ 20 сентября 2018

Вы можете использовать @RequestBody и @RequestParam вместе следующим образом:

... / addPerson? SendEmail = true

Поэтому отправьте значение «sendEmail» в качестве параметра запроса и person в качестве тела запроса

Spring MVC - Почему не удается использовать @RequestBody и @RequestParam вместе

0 голосов
/ 20 сентября 2018

У вас есть несколько решений

1 - Вы можете поставить @Column (вставка = ложь, обновляемый = ложь) над этим свойством

2 - отправить его как параметр запроса @RequestParam @RequestMapping (value = "/ AddPerson", method = RequestMethod.POST) public String savePerson (@Valid @RequestBody Person person, @RequestParam логический sendMail) {}

3 - используйте DTO, чтобы сказать PersonModel и сопоставить его с Person передсохранить

0 голосов
/ 20 сентября 2018

Вам понадобится промежуточный DTO, иначе вам придется изменить лицо, чтобы включить поле для shouldSendEmail.Если это невозможно, единственной альтернативой является использование JsonNode и выбор свойств из дерева вручную.

Например,

@Getter
public class PersonDTO {
    private final String name;
    private final String password;
    private final Integer shouldSendEmail;

    @JsonCreator
    public PersonDTO(
        @JsonProperty("name") final String name,
        @JsonProperty("password") final String password,
        @JsonProperty("shouldSendEmail") final Integer shouldSendEmail
    ) {
        this.name = name;
        this.password = password;
        this.shouldSendEmail = shouldSendEmail;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...