gpt4 book ai didi

Jetty 与 Tomcat 中 Spring Controller 的 JSON 响应

转载 作者:行者123 更新时间:2023-11-28 22:57:15 25 4
gpt4 key购买 nike

我正在构建一个简单的 Spring MVC webapp,并在 jetty 上进行开发。我的 Controller 绑定(bind)使用了这个:

@RequestMapping(value = RESTRoutes.CREATE_DOC, method = RequestMethod.POST)
public @ResponseBody String getDoc

在我的 ajax 响应中,从 JSONObject 返回的字符串正确解析为 JSON。

但是使用相同的 Controller ,我将我的 gradle war 部署到 tomcat,我的 json 返回时包装成真正的字符串。

所以我更改了标题以使用 Map,这似乎可以解决 jetty 和 tomcat 中的问题:

@RequestMapping(value = RESTRoutes.CREATE_DOC, method = RequestMethod.POST)
public @ResponseBody Map<String, String> getDoc

我用这个从字符串转换成 map :

        HashMap<String, String> jsonResponse = new HashMap<String, String>();
if(claimFolder.has("error")){
response.setStatus(500);
}else{
jsonResponse = new ObjectMapper().readValue(claimFolder.toString(), HashMap.class);
}
return jsonResponse;

我的问题是为什么这是必要的?

这是我的 jackson 转换器配置:

<bean id="formConverter" class="org.springframework.http.converter.FormHttpMessageConverter" />

<!-- add byte[] converter -->
<bean id="byteArrayConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
<property name="supportedMediaTypes" value="application/octet-stream" />
</bean>

<!-- add in our JSON message converter -->
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json;charset=UTF-8" />
</bean>

<!-- add in our plain string message converter -->
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
</bean>

<!-- Expose the authenticated handler to all beans that have been declared via annotation -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
</bean>

TL;DR:为什么 jetty 和 tomcat 返回字符串化 JSON 的方式不同?

最佳答案

嗯,对于 Spring 内容协商而言,将 String 对象转换为简单字符串而不将其编码为 JSON 对象是绝对正常的。为了在 JSON 对象中序列化 java String 对象,您需要先将其包装在某个 java 类中。例如:

QuestionStatus {

private String status;

public QuestionStatus(String status) {
this.status = status;
}

public getStatus() {
return status;
}
}

因此,您必须在 Controller 方法中返回 QuestionStatus 而不是字符串。

关于Jetty 与 Tomcat 中 Spring Controller 的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24461368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com