Как создать контроллер Spring Boot - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть приложение с загрузочной пружиной, которому нужен контроллер, который может обработать следующий запрос:

Запрос отправлен другим сервисом методом Post.

Headers

принять кодировку: gzip, deflate

user-agent: Apache-HttpClient / 4.3.6 (java 1.5)

соединение: Keep-Alive

хост: webhook.site

тип содержимого: application / x-www-form-urlencoded

content-length: 558

Строки запроса: (пусто)

Значения формы

Номер счета: 41492032464

BillValue: 600000.0

Описание: Описание

У меня есть этот контроллер, но мое приложение возвращает ошибку HTTP 406:

@RequestMapping(value = "/bills", method = RequestMethod.POST, headers = "Accept=application/x-www-form-urlencoded")
    @ResponseBody
    @Transactional
    public void createBill(UriComponentsBuilder uriComponentsBuilder, final HttpServletRequest request,
            final HttpServletResponse response) throws IOException {
}

Как этот контроллер должен быть реализован в моем приложении весенней загрузки?

Большое спасибо!

1 Ответ

0 голосов
/ 16 ноября 2018

Это не очень понятно для меня, но если вы используете весеннюю загрузку, вы, конечно, можете создать контроллер, сервис и репозиторий или dao. Действительно, ваш диспетчер позвонит вашему сервису, который вызовет хранилище.

Предположим, что у вас есть клиент, который вызывает ваш API.

Так звонок будет выглядеть так:

// Suppose that is a spring boot project

Class A {

@Autowired 
RestTemplate restTemplate;

public void create(){

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.setContentType((MediaType.APPLICATION_JSON));
    headers.add("X-yourCustom-context", "yourCustom");

    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(your_service_url)
                    .queryParam("params1", "value".queryParam("params2", value2));
    HttpEntity<?> entity = new HttpEntity<>(headers);

    restTemplate.exchange(builder.build().encode().toUri(), HttpMethod.POST, entity, null); // if you want to return an objectr you put it rather than the null

}

}

API услуги:

@RestController
public class YourController {
    @Autowired
    private YourService service;

    @Autowired
    private ObjectMapper objectMapper;


    @PostMapping(value = "/bills")
    //@ResponseBody if you do not return any think you can not use it
    // @CrossOrigin if you want to call your reste from an external project like javascript or angular
    //@Transactional you can put it on the top of your service methode
    public void createBill(@RequestParam(value = "params1", required = true) String params1, 
    @RequestParam(value = "params2", required = true) String params2,
    @RequestHeader(value = "X-yourCustom-context", required = true) String yourContxt) throws IOException {

    // You can then convert your x-context to an object that you have already by using objectMapper.readValue
    // Finaly you call you service to create the bill and you passe as params what you get fron the client 
}
}

Я надеюсь, что это отвечает вашим потребностям:)

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