我的控制器是这样的
@RequestMapping(value ="/getTaggedProducts", method = RequestMethod.GET)
@ResponseBody
public String getProductsTagged(@RequestParam("questionnaireId")Long questionnaireId){
Map<String, Object> response = new HashMap<String, Object>();
try{
Questionnaire questionnaireProduct = Questionnaire.findQuestionnaire(questionnaireId);
Organisation userOrg = getUserAffiliation();
if (questionnaireProduct == null) throw new QuestionnaireBuilderException("Questionnaire '" + questionnaireId + "'does not exist");
if (!questionnaireProduct.isEditable()) throw new QuestionnaireBuilderException("You cannot edit a questionnaire which has been assigned");
Set<Product> productCategories = questionnaireProduct.getProducts();
List<Long> productIds = new ArrayList<Long>();
for(Product p: productCategories){
productIds.add(p.getId());
}
LOG.debug("Product Categories successfully added to questionnaire");
response.put("message", "success");
response.put("products", productIds);
} catch (QuestionnaireBuilderException e) {
LOG.debug(e.getMessage(), e);
response.put("message", e.getMessage());
} catch (Exception e) {
LOG.error("Unhandled Exception: " + e.getMessage(), e);
response.put("message", "Unhandled Exception");
}
return new JSONSerializer().exclude("*.class").deepSerialize(response);
}
不会设置响应标头会造成任何问题。我知道如何设置此问题的响应标头 - In Spring MVC, how can I set the mime type header when using @ResponseBody 在我的ajax调用中,我指定了
datatype: "json"
这是否足够,或者我也需要设置标题。感谢
答案 0 :(得分:0)
由于您手动生成JSON响应为字符串,是的,您需要自己添加标头。 您可以通过向处理程序方法添加 HttpServletResponse 参数并调用 addHeader (...)来完成此操作。
或者(我认为更好)是使用Spring自动帮助JSON序列化。尝试将Jackson添加到类路径中,而不是返回字符串,返回结构。 e.g:
@RequestMapping(value="/getTaggedProducts",method=RequestMethod.GET)
@ResponseBody
public Map<String,Object> getProductsTagged(@RequestParam("questionnaireId") Long questionnaireId) {
final Map<String,Object> json = ...;
return json;
}