将自定义标头添加到REST PUT请求

吉姆·肯尼迪

我有一个使用Spring Boot 2.1.8和Angular前端的应用程序。我已经使用@RepositoryRestResource定义了我的存储库。Spring Boot应用程序基本上为Angular提供了REST API。该应用程序定义了几个业务实体,并且REST respo为每个实体提供CRUD功能。这是这些实体之一的典型回购接口:

// REST resouce /api/privgroups
@RepositoryRestResource(collectionResourceRel = "privgroups", path = "privgroups")
public interface PrivGroupRepository extends CrudRepository<PrivGroup, Long>
{
   List<PrivGroup> findAll();
}

GETing和单个实体,POST(创建实体)和PUTing(更新实体)都可以正常工作,但是我想在更新(HTTP PUT)实体时返回自定义标头。标头将由Angular端使用,以显示特定于该实体的自定义烤面包机消息。由于存储库还实现了REST接口,因此我不确定如何添加将根据目标实体而更改的特定标头。

我已经开发了包含REST控制器的应用程序,该REST控制器调用服务,而服务又调用存储库。在这种情况下,我拥有更多控制权,可以轻松地返回自定义标头,如下所示:

@PutMapping("/{id}")
public ResponseEntity<MyEntity> updateMyEntity(@PathVariable("id") Long id, @RequestBody MyEntity myEntity)
{
    MyEntity updatedEntity = this.MyEntityService.updateMyEntity(MyEntity);
    return ResponseEntity.ok()
        .header("X-Save", "MyEntity")
        .body(updatedEntity);
}

我可以使用一种更新的“内置”技术来实现此目的吗?我知道我可以使用过滤器添加标题,并且已经阅读了有关该主题的几篇文章。我认为很难识别要更新的实体,但我不确定这是最好的方法。

请注意,该帖子:Rest API-如何添加自定义标头?真的很老 spring data rest docs https://docs.spring.io/spring-data/rest/docs/current/reference/html/没有关于此主题的特定内容。

佩佩瓦尔贝

我最近使用过Spring Data Rest,但没有找到任何“内置”技术。但是,您可以通过@ControllerAdvice注释的类中实现ResponseBodyAdvice接口来实现这一点这是我的方法:

@ControllerAdvice
public class PutMyEntityBodyAdvice implements ResponseBodyAdvice<Object> {

    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {

        // Write the condition to check if beforyBodyWrite should be called
        return returnType.getParameterType().equals(ResponseEntity.class);
    }

    @Override
    public Object beforeBodyWrite(Object object, MethodParameter returnType, MediaType selectedContentType,
                                  Class<? extends HttpMessageConverter<?>> selectedConverterType,
                                  ServerHttpRequest request, ServerHttpResponse response) {

        // Check if it is a PUT request for MyEntity object
        if (HttpMethod.PUT.equals(request.getMethod()) && object instanceof PersistentEntityResource) {
            PersistentEntityResource persistentEntityResource = (PersistentEntityResource) object;
            if (persistentEntityResource.getContent().getClass().equals(MyEntity.class)) {
                // Add custom header or manipulate response object
                response.getHeaders().add("X-Save", "MyEntity");
            }
        }
        return object;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将自定义标头添加到“请求”

来自分类Dev

将自定义标头添加到“请求”

来自分类Dev

将自定义http标头添加到所有jQuery AJAX请求中

来自分类Dev

将自定义http标头添加到chai请求

来自分类Dev

SoapUI-自动将自定义SOAP标头添加到传出请求中

来自分类Dev

如何将自定义标头添加到Google oauth回调请求

来自分类Dev

添加自定义请求标头

来自分类Dev

将自定义卡信息添加到付款请求

来自分类Dev

向 Aurelia Fetch 请求添加自定义标头

来自分类Dev

将自定义标头设置为websocket请求(ktor)

来自分类Dev

Azure移动服务:如何将自定义标头注入请求中?

来自分类Dev

使用chrome自定义标签时,是否可以添加自定义请求标头?

来自分类Dev

使用OpenSSL将自定义扩展名添加到PKCS#10请求中(以编程方式)

来自分类Dev

在Spring WS中将自定义元素添加到SOAP标头

来自分类Dev

将自定义标头添加到目录中的特定文件

来自分类Dev

将自定义标头添加到.Net中的所有Swagger响应中

来自分类Dev

Angular:将自定义HTTP响应标头添加到dev`ng serve`

来自分类Dev

如何将自定义标头添加到SignalR的Typescript客户端?

来自分类Dev

将自定义HTTP标头添加到Nginx X-Accel-Redirect

来自分类Dev

将自定义标头添加到.Net中的所有Swagger响应中

来自分类Dev

将自定义标头添加到所有模块中的所有资源

来自分类Dev

将自定义标头添加到iframe asp.net

来自分类Dev

Wordpress将自定义HTTP标头添加到一个模板文件

来自分类Dev

如何将自定义HTTP标头添加到Chrome自定义标签?

来自分类Dev

Swift:将标头添加到我的REST POST请求中

来自分类Dev

Firebase没有将CORS标头添加到REST请求

来自分类Dev

在Spring集成中将X附加到自定义请求标头

来自分类Dev

使用Django Rest框架在发布请求时获取自定义标头

来自分类Dev

如何在cxf soap请求中添加自定义标头?

Related 相关文章

  1. 1

    将自定义标头添加到“请求”

  2. 2

    将自定义标头添加到“请求”

  3. 3

    将自定义http标头添加到所有jQuery AJAX请求中

  4. 4

    将自定义http标头添加到chai请求

  5. 5

    SoapUI-自动将自定义SOAP标头添加到传出请求中

  6. 6

    如何将自定义标头添加到Google oauth回调请求

  7. 7

    添加自定义请求标头

  8. 8

    将自定义卡信息添加到付款请求

  9. 9

    向 Aurelia Fetch 请求添加自定义标头

  10. 10

    将自定义标头设置为websocket请求(ktor)

  11. 11

    Azure移动服务:如何将自定义标头注入请求中?

  12. 12

    使用chrome自定义标签时,是否可以添加自定义请求标头?

  13. 13

    使用OpenSSL将自定义扩展名添加到PKCS#10请求中(以编程方式)

  14. 14

    在Spring WS中将自定义元素添加到SOAP标头

  15. 15

    将自定义标头添加到目录中的特定文件

  16. 16

    将自定义标头添加到.Net中的所有Swagger响应中

  17. 17

    Angular:将自定义HTTP响应标头添加到dev`ng serve`

  18. 18

    如何将自定义标头添加到SignalR的Typescript客户端?

  19. 19

    将自定义HTTP标头添加到Nginx X-Accel-Redirect

  20. 20

    将自定义标头添加到.Net中的所有Swagger响应中

  21. 21

    将自定义标头添加到所有模块中的所有资源

  22. 22

    将自定义标头添加到iframe asp.net

  23. 23

    Wordpress将自定义HTTP标头添加到一个模板文件

  24. 24

    如何将自定义HTTP标头添加到Chrome自定义标签?

  25. 25

    Swift:将标头添加到我的REST POST请求中

  26. 26

    Firebase没有将CORS标头添加到REST请求

  27. 27

    在Spring集成中将X附加到自定义请求标头

  28. 28

    使用Django Rest框架在发布请求时获取自定义标头

  29. 29

    如何在cxf soap请求中添加自定义标头?

热门标签

归档