programing

Spring Boot Rest 서비스 메서드에서 응답 헤더 값을 설정하려면 어떻게 해야 합니까?

starjava 2023. 3. 8. 20:33
반응형

Spring Boot Rest 서비스 메서드에서 응답 헤더 값을 설정하려면 어떻게 해야 합니까?

초심자 질문...첫 봄 부츠 레스트풀 서비스를 만들고 있어요.restore 서비스 설계에서는 응답 헤더에 데이터를 반환해야 합니다.

컨트롤러 클래스의 메서드 내에서 응답 헤더 값을 설정하려면 어떻게 해야 합니까?

Spring 문서:

@RequestMapping("/handle")
public ResponseEntity<String> handle() {
    URI location = ...;
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.setLocation(location);
    responseHeaders.set("MyResponseHeader", "MyValue");
    return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

출처 : https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html

다른 답변과 달리, 사용하지 마십시오.HttpServletResponse회피할 수 있다면 저레벨 Servlet API로 작업하고 싶지 않을 것입니다.ResponseEntity 반환 또는HttpEntity.

HttpHeaders headers = new HttpHeaders();
headers.add("1", "uno");

return new ResponseEntity<>(headers, HttpStatus.OK);

답을 찾고 있었는데, 응답 엔티티를 만들 필요가 없습니다.스프링 포룸에서 해결책을 찾았으니 작가님께 맡겨주세요.

즉, method-declaration으로 응답을 요구할 수 있습니다.이것에 의해, 이 정보가 입력됩니다.

간단한 예:

@RequestMapping(value="/car/{carId}", method = RequestMethod.Get)
@ResponseBody
public Car getCarById(@PathVariable("carId") String Id, HttpServletResponse response) {

    response.setHeader("X-Special-Header", myCar.getEcoLabel());
    //get the car
    return myCar;
}

이것이 다른 사람들에게도 도움이 되기를 바랍니다.

http://forum.spring.io/forum/spring-projects/web-services/102652-setting-header-values-with-spring-rest-controller

응답 헤더를 설정하는 방법은 여러 가지가 있습니다.

  1. @Matias Elorriaga에서 언급했듯이 이를 사용하여 단일 응답에 헤더를 추가할 수 있습니다.
  2. 또는 모든 응답에 헤더를 추가하려면 Java 필터를 추가할 수도 있습니다.

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;

@javax.servlet.annotation.WebFilter(urlPatterns = {"/*"})
@Component
public class ResponseHeaderFilter implements javax.servlet.Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("My-Custom-Header", "Header-Value-Here");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

  1. 또는 Spring 5에서는 WebFilter를 사용하여 모든 응답에 헤더를 추가할 수도 있습니다.

import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;

@Component
public class ResponseHeaderWebFilter implements WebFilter {

    @Override
    public Mono filter(ServerWebExchange exchange, WebFilterChain chain) {
        exchange.getResponse().getHeaders().add("My-Custom-Header", "My-Value-Here");
        return chain.filter(exchange);
    }
}

언급URL : https://stackoverflow.com/questions/45152484/how-to-set-respond-header-values-in-spring-boot-rest-service-method

반응형