我想从服务器返回一个静态.json文件。不仅是出于测试目的,我想将json文件定义为资源文件(比如data.json),这样我就可以轻松修改它。
我已经完成了这项工作,将data.json放在资源目录中并使用以下命令指定资源映射:
<resources mapping="/resources/**" location="/resources/" />
我的问题是,当返回data.json时,内容类型为application/octet-stream
,而我希望它为application/json
。我该如何指定?
此外,在我的控制器中,我有一些方法返回一个字符串(例如home
),它通过InternalResourceViewResolver
自动映射到jsp:
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
如何为.json资源做同样的事情(显然没有jsp编译过程)?
答案 0 :(得分:2)
我认为在你的web.xml中你可以添加:
<mime-mapping>
<extension>json</extension>
<mime-type>application/json</mime-type>
</mime-mapping>
我相信这将指示Web容器将application / json mime类型应用于任何以.json扩展名提供的文件。
答案 1 :(得分:0)
您可以通过为所请求的控制器方法添加@ResponseBody
,从控制器发送响应作为jSON字符串,如:
public @ResponseBody String getJsonDetails(){
return object; // object may be your list of object(which will send response as JSON) or simple json string
}
您需要通过在spring-context xml文件中添加以下bean来配置它:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html"/>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="prefixJson" value="true"/>
</bean>
</list>
</property>
</bean>
答案 2 :(得分:0)
重温旧问题,只是提供最新的答案。以下代码段应该是不言自明的:
@RestController
public class JsonController {
@GetMapping(value = "/file", produces = MediaType.APPLICATION_JSON_VALUE)
public String defaultQuiz() {
Resource resource = new ClassPathResource("data.json");
String json = "";
try(InputStream stream = resource.getInputStream()) {
json = StreamUtils.copyToString(stream, Charset.forName("UTF-8"));
} catch (IOException ioe) {
throw new YourCustomRuntimeException(ioe.getMessage(), ioe);
}
return json;
}
}
答案 3 :(得分:0)
我做到了。
@GetMapping(value = "/my-endpoint",
produces = MediaType.APPLICATION_JSON_VALUE)
public String fetchJson() {
String json = "";
try(InputStream stream = getClass().getResourceAsStream("/my-static-json.json")) {
json = StreamUtils.copyToString(stream, Charset.forName("UTF-8"));
} catch (IOException ioe) {
log.error("Couldn't fetch JSON! Error: " +
ioe.getMessage());
}
return json;
}
注意:JSON 文件在 src/main/resources 下