Как преобразовать поле Requestbody до получения дескриптора с аннотацией - PullRequest
1 голос
/ 01 мая 2019

Мне нужно внести некоторые изменения в тело некоторых полезных нагрузок в методе post, чтобы изменить значения, например, в верхнем или нижнем регистре. Я исследовал, что ближе всего к тому, что мне нужно, это HandlerMethodArgumentResolver

@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LowerCase {

}

@Data
@Builder
@Document
@NoArgsConstructor
@AllArgsConstructor
public class Customer extends Model {

  @LowerCase
  private String email;

  @LowerCase
  private String username;
}

@RequestMapping(value = "user", method = RequestMethod.POST)
ResponseEntity<Customer> test(@RequestBody @Valid Customer payload) {
  System.out.println(payload);
  return ResponseEntity.ok(payload);
}

если я отправлю это

{
  "email": "IBARRAJJ@GMAIL.COM",
  "username": "JIBARRA"
}

Результат с необходимостью

{
  "email": "ibarrajj@gmail.com",
  "username": "jibarra"
}

Спасибо

Ответы [ 3 ]

2 голосов
/ 03 мая 2019
@Data
@Builder
@Document
@NoArgsConstructor
@AllArgsConstructor
public class Customer extends Model {

  @JsonDeserialize(using = ToLowerCaseDeserializer.class)
  private String email;

  @JsonDeserialize(using = ToLowerCaseDeserializer.class)
  private String username;
}

В ToLowerCaseDeserializer.java реализована логика для преобразования входящего текста в нижний регистр

public class ToLowerCaseDeserializer extends StdDeserializer<String> {

    private static final long serialVersionUID = 7527542687158493910L;

    public ToLowerCaseDeserializer() {
        super(String.class);
    }

    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        return _parseString(p, ctxt).toLowerCase();
    }

}
1 голос
/ 17 мая 2019

Вы можете вносить изменения в тело запроса, используя конвертеры сообщений Spring , определять пользовательский конвертер для Json конвертера (который преобразует JSON в Object) и добавьте его, как показано ниже для spring-boot.

Чтобы написать конвертер сообщений, расширьте Spring AbstractHttpMessageConverter (для нового пользовательского конвертера) и переопределите три метода readInternal (), writeInternal() и поддерживает ().

Spring использует HttpMessageConverters для рендеринга @ResponseBody (или ответов @RestController).Вы можете добавить дополнительные конвертеры, добавив bean-компоненты соответствующего типа в контексте Spring Boot.Если добавляемый компонент имеет тип, который в любом случае был бы включен по умолчанию (например, MappingJackson2HttpMessageConverter для преобразований JSON), он заменяет значение по умолчанию.Предоставляется вспомогательный компонент типа HttpMessageConverters, который всегда доступен, если вы используете конфигурацию MVC по умолчанию.У него есть несколько полезных методов для доступа к конвертерам сообщений по умолчанию и расширению пользователя (например, это может быть полезно, если вы хотите вручную вставить их в пользовательский шаблон RestTemplate).

@Configuration
public class MyConfiguration {
@Bean
public HttpMessageConverters customConverters() {
    HttpMessageConverter<?> additional = ...
    HttpMessageConverter<?> another = ...
    return new HttpMessageConverters(additional, another);
}

}

Подобный пост: Spring boot, как настроить HttpMessageConverter

Ссылка для ответа: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-responsebody-rendering

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-message-converters

0 голосов
/ 03 мая 2019

Просто сделай это в контроллере.Я не думаю, что конвертер сообщений - это место для конвертации данных

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...