Spring MVC에서 @ResponseBody를 사용할 때 MIME 유형 헤더를 설정하려면 어떻게 해야 합니까?
JSON 문자열을 반환하는 Spring MVC 컨트롤러가 있는데 mimtype을 application/json으로 설정하려고 합니다.내가 어떻게 그럴 수 있을까?
@RequestMapping(method=RequestMethod.GET, value="foo/bar")
@ResponseBody
public String fooBar(){
return myService.getJson();
}
비즈니스 오브젝트는 이미 JSON 문자열로 사용할 수 있으므로MappingJacksonJsonView
나한테는 해결책이 안 돼 @ResponseBody
완벽합니다만, mimtype을 설정하려면 어떻게 해야 하나요?
사용하다ResponseEntity
대신ResponseBody
이렇게 하면 응답 헤더에 액세스하여 적절한 콘텐츠유형을 설정할 수 있습니다.Spring 문서에 따르면:
그
HttpEntity
와 유사하다@RequestBody
그리고.@ResponseBody
요청 및 응답 기관에 접근할 수 있는 것 외에HttpEntity
(및 응답 고유의 서브클래스는ResponseEntity
)는 요구 및 응답 헤더에 대한 접근도 허용합니다.
코드는 다음과 같습니다.
@RequestMapping(method=RequestMethod.GET, value="/fooBar")
public ResponseEntity<String> fooBar2() {
String json = "jsonResponse";
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity<String>(json, responseHeaders, HttpStatus.CREATED);
}
JSON 문자열이 아닌 도메인 오브젝트를 반환하고 Spring이 (를 통해) 시리얼화를 처리하도록 서비스를 리팩터링하는 것을 검토하겠습니다.MappingJacksonHttpMessageConverter
기입해 주세요).Spring 3.1에서는 구현이 매우 깔끔해 보입니다.
@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE,
method = RequestMethod.GET
value = "/foo/bar")
@ResponseBody
public Bar fooBar(){
return myService.getBar();
}
코멘트:
일단은<mvc:annotation-driven />
또는@EnableWebMvc
응용 프로그램 구성에 추가해야 합니다.
다음으로 는 의 Atribute를 생성합니다.@RequestMapping
주석은 응답의 내용 유형을 지정하는 데 사용됩니다.따라서 MediaType으로 설정해야 합니다.APPLICATION_JSON_VALUE(또는"application/json"
).
마지막으로 잭슨은 Java와 JSON 사이의 모든 시리얼화와 디시리얼라이제이션이 스프링에 의해 자동으로 처리되도록 추가해야 합니다(잭슨의 의존성은 스프링 및MappingJacksonHttpMessageConverter
후드 아래에 있을 것)
@ResponseBody에서는 할 수 없지만 다음과 같은 기능이 있습니다.
package xxx;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class FooBar {
@RequestMapping(value="foo/bar", method = RequestMethod.GET)
public void fooBar(HttpServletResponse response) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(myService.getJson().getBytes());
response.setContentType("application/json");
response.setContentLength(out.size());
response.getOutputStream().write(out.toByteArray());
response.getOutputStream().flush();
}
}
이건 불가능할 것 같아.오픈 지라가 있는 것 같습니다.
SPR-6702: @ResponseBody에서 응답 Content-Type을 명시적으로 설정
등록하세요org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
메시지 변환기로서 개체를 메서드에서 직접 반환합니다.
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"/>
</property>
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
컨트롤러:
@RequestMapping(method=RequestMethod.GET, value="foo/bar")
public @ResponseBody Object fooBar(){
return myService.getActualObject();
}
여기에는 의존관계가 필요합니다.org.springframework:spring-webmvc
.
난 네가 할 수 있다고 생각하지 않아response.setContentType(..)
내 버전의 현실.HTML 파일을 로드하여 브라우저로 스트리밍합니다.
@Controller
@RequestMapping("/")
public class UIController {
@RequestMapping(value="index", method=RequestMethod.GET, produces = "text/html")
public @ResponseBody String GetBootupFile() throws IOException {
Resource resource = new ClassPathResource("MainPage.html");
String fileContents = FileUtils.readFileToString(resource.getFile());
return fileContents;
}
}
언급URL : https://stackoverflow.com/questions/4471584/in-spring-mvc-how-can-i-set-the-mime-type-header-when-using-responsebody
'programing' 카테고리의 다른 글
React에서 구성 요소 간에 기능을 공유하는 올바른 방법 (0) | 2023.02.27 |
---|---|
AngularJS HotTowel에서 vm "ControllerAs" 구문을 사용하는 경우 장치 테스트 파일에서 $scope에 액세스합니다. (0) | 2023.02.27 |
Woocommerce에서 활성화된 모든 결제 방법 나열 (0) | 2023.02.27 |
Oracle 테이블이 마지막으로 업데이트된 시기를 확인하는 방법 (0) | 2023.02.27 |
입력 유형 = 파일에서 선택한 이미지를 반응으로 표시하는 방법JS (0) | 2023.02.27 |