错误:org.springframework.web.HttpMediaTypeNotSupportedException:不支持内容类型’text / plain; charset = UTF-8′

我是Spring Data的新手。 我一直收到错误: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'text/plain;charset=UTF-8' not supported我试图将@RequestMapping注释中的消耗更改为text/plain但不幸的是它没有救命。*

有任何想法吗?

谢谢,

我的代码看起来像这样:

 package com.budget.processing.application; import com.budget.business.service.Budget; import com.budget.business.service.BudgetItem; import com.budget.business.service.BudgetService; import com.budget.processing.dto.BudgetDTO; import com.budget.processing.dto.BudgetPerConsumerDTO; import com.utils.Constants; import com.common.utils.config.exception.GeneralException; import org.apache.log4j.Logger; import org.joda.time.YearMonth; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.ws.rs.core.MediaType; import java.text.ParseException; import java.util.ArrayList; import java.util.Collection; import java.util.List; @Controller("budgetManager") @RequestMapping(value = "budget", produces = Constants.RESPONSE_APP_JSON) @Transactional(propagation = Propagation.REQUIRED) public class BudgetManager { private static final Logger logger = Logger.getLogger(BudgetManager.class); @Autowired private BudgetService budgetService; @RequestMapping(method = RequestMethod.GET) public @ResponseBody Collection getBudgetMonthlyAllConsumers() throws GeneralException { List budgetList = budgetService.getBudgetForAllConsumers(); List bugetDtos = new ArrayList(); for (Budget budget : budgetList) { BudgetDTO budgetDTO = generateBudgetDto(budget); bugetDtos.add(budgetDTO); } return bugetDtos; } @RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON) public @ResponseBody Collection updateConsumerBudget(@RequestParam(value = "budgetPerDate", required = false) ArrayList budgetPerDate) throws GeneralException, ParseException { List budgetItemList = new ArrayList(); List budgets = new ArrayList(); if (budgetPerDate != null) { for (BudgetPerConsumerDTO budgetPerConsumerDTO : budgetPerDate) { budgetItemList.add(budgetService.createBudgetItemForConsumer(budgetPerConsumerDTO.getId(), new YearMonth(budgetPerConsumerDTO.getDate()), budgetPerConsumerDTO.getBudget())); } } budgets = budgetService.getBudgetForAllConsumers(); List budgetDTOList = new ArrayList(); for (Budget budget : budgets) { BudgetDTO budgetDto = generateBudgetDto(budget); budgetDTOList.add(budgetDto); } return budgetDTOList; } 

}

这是我得到的例外:

 ERROR 2014-07-26 18:05:10.737 (GlobalExceptionHandler.eITFMSException: 86) Error executing Web Service org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'text/plain;charset=UTF-8' not supported at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:215) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:289) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:229) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:56) at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:298) at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1091) 

请求看起来像这样:我正在使用Simple Rest Template Google Extension。 请求如下所示:

 localhost:8080/rest 1 requests ❘ 140 B transferred HeadersPreviewResponseCookiesTiming Remote Address:localhost:8080 Request URL: localhost:8080/rest/budget Request Method:PUT Status Code:500 Internal Server Error Request Headersview source Accept:*/* Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8,he;q=0.6 Connection:keep-alive Content-Length:331 Content-Type:text/plain;charset=UTF-8 Cookie:JSESSIONID=AE87EEB7A73B9F9E81956231C1735814 Host:10.23.204.204:8080 Origin:chrome-extension://fhjcajmcbmldlhcimfajhfbgofnpcjmb User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 Request Payloadview parsed { "budgetPerDate": [ { "id":942, "date":[ 2014, 1, 1 ], "budget": 100 }, { "id":942, "date":[ 2014, 2, 1 ], "budget": 150 } ] } 

基于评论中提到的内容,最简单的解决方案是:

 @RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public Collection updateConsumerBudget(@RequestBody SomeDto someDto) throws GeneralException, ParseException { //whatever } class SomeDto { private List budgetPerDate; //getters setters } 

该解决方案假定您正在创建的HTTP请求实际上具有

Content-Type:application/json而不是text/plain

对我来说,事实certificate我在一个实体中有一个@JsonManagedReferece而在另一个被引用的实体中没有@JsonBackReference 。 这导致编组人员抛出错误。

好的 – 对我来说问题的根源在于序列化/反序列化。 正在发送和接收的对象如下所示,其中提交了代码并返回了代码和maskedPhoneNumber。

 @ApiObject(description = "What the object is for.") @JsonIgnoreProperties(ignoreUnknown = true) public class CodeVerification { @ApiObjectField(description = "The code which is to be verified.") @NotBlank(message = "mandatory") private final String code; @ApiObjectField(description = "The masked mobile phone number to which the code was verfied against.") private final String maskedMobileNumber; public codeVerification(@JsonProperty("code") String code, String maskedMobileNumber) { this.code = code; this.maskedMobileNumber = maskedMobileNumber; } public String getcode() { return code; } public String getMaskedMobileNumber() { return maskedMobileNumber; } } 

问题是我没有为构造函数中的maskedMobileNumber定义JsonProperty。 即构造函数应该是

 public codeVerification(@JsonProperty("code") String code, @JsonProperty("maskedMobileNumber") String maskedMobileNumber) { this.code = code; this.maskedMobileNumber = maskedMobileNumber; }