powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring CustomHttpMessageConverter ?
3 сообщений из 3, страница 1 из 1
Spring CustomHttpMessageConverter ?
    #39335697
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день .

собственно сабж ?

как ?

Есть сервис который имеет свой собственный протокол :
я хочу с ним общаться - и пишу простого REST клиента , но сервис отдает данные в странном своем формате

нужен CustomHttpMessageConverter чтобы ему эти данные отдать и получив распарсить в объекты

вопрос в том как связать в одном объекте параметры запроса и ответа? так чтобы они ходили вместе и хранились вместе но логически были разными классами .

и второй вопрос как тогда написать CustomHttpMessageConverter ?

код такой

Я сервису отправляю класс LoginRequest
в ответ хочу получить класс LoginResponse

Использую RestTemplate (spring )

Код: java
1.
2.
3.
4.
5.
  @Override
    public ResponseEntity<LoginResponse> login(RequestEntity<LoginRequest> loginRequest) {
        restTemplate.setMessageConverters(Arrays.asList(new CustomHttpMessageConverter()));
        return restTemplate.exchange(loginUrl, HttpMethod.POST, loginRequest, LoginResponse.class);
    




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Data
public class LoginRequest<R extends LoginResponse> {

    private Long login;

    private Long password;

    @Data
    public static class LoginResponse {

        private int requestSign;

    }
}



что понимает сервис ?

Его апи говорит что ему нужно отправить POST
и в теле передать строку вида :

LOGIN=*****&PASSWORD=****

в ответе он вернет

REQUEST_SIGN=<code>


я пишу свой преобразователь в этот супер оригинальный формат :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
public class CustomHttpMessageConverter extends AbstractHttpMessageConverter<LoginRequest> {

    public GateHttpMessageConverter() {
        super(new MediaType(MediaType.TEXT_PLAIN, StandardCharsets.UTF_8));
    }

    @Override
    protected boolean supports(Class<?> clazz) {
        return true;
    }

    @Override
    protected LoginRequest readInternal(Class<? extends LoginRequest> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        String result = new BufferedReader(new InputStreamReader(inputMessage.getBody()))
                .lines().collect(Collectors.joining("\n"));
        
       String[] ar = result.split("&");
        
        long nextExtTrnId = 1;
        int requestSign = 0;

        LoginRequest loginRequest = new LoginRequest();
        
        LoginRequest.LoginResponse response = new LoginResponse();
        response.setNextExtTrnId(nextExtTrnId);
        response.setRequestSign(requestSign);
        
        return loginRequest;

    }

    @Override
    protected void writeInternal(LoginRequest loginRequest, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        String body = String.format("LOGIN=%s&PASSWORD=%s", loginRequest.getLogin(),loginRequest.getPassword());
        outputMessage.getBody().write(body.getBytes());
        
    }
}



но что хочется

1) так так как таких LoginRequest - > LoginResponse много разных - хочется описать все через рефлексию ,
2) writeInternal - должен принимать - LoginRequest дженерик тип неоторого абстрактного класса наследника Request
и каким то образом хранить сам запрос класс до получения ответа (время жизни этого класса )

3) readInternal - должен вернуть либо LoginRequest с заполненной частью что ответил сервис (LoginResponse), и взять LoginRequest откуда то ...

4) readInternal чисто теоретически моет вернуть LoginResponse ( но тогда функционал хранения LoginRequest данных должен где то реализовываться выше )


?
...
Рейтинг: 0 / 0
Spring CustomHttpMessageConverter ?
    #39335708
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то вы не то делаете - если я правильно понимаю документацию, то CustomHttpMessageConverter должно использоваться, если требуется специальная обработка Content-Type.
Про Content-Type вашего сервиса - ни слова. Но, "меня опять терзают смутные сомнения", что это какой-то один тип.
И пока это всё выглядит как архитектура ради архитектуры.
...
Рейтинг: 0 / 0
Spring CustomHttpMessageConverter ?
    #39335714
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЧто-то вы не то делаете - если я правильно понимаю документацию, то CustomHttpMessageConverter должно использоваться, если требуется специальная обработка Content-Type.
Про Content-Type вашего сервиса - ни слова. Но, "меня опять терзают смутные сомнения", что это какой-то один тип.
И пока это всё выглядит как архитектура ради архитектуры.

Да вот же MediaType.TEXT_PLAIN
public GateHttpMessageConverter() {
super(new MediaType(MediaType.TEXT_PLAIN, StandardCharsets.UTF_8));
}


Да это все фасадное месиво - чтобы красиво все было )
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring CustomHttpMessageConverter ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]