[SPRING] 오류 : org.springframework.web.HttpMediaTypeNotSupportedException : 'text / plain; charset = UTF-8'콘텐츠 유형이 지원되지 않습니다.
SPRING오류 : org.springframework.web.HttpMediaTypeNotSupportedException : 'text / plain; charset = UTF-8'콘텐츠 유형이 지원되지 않습니다.
나는 Spring Data의 초보자입니다. org.springframework.web.HttpMediaTypeNotSupportedException : 콘텐츠 유형 'text / plain; charset = UTF-8'이 지원되지 않음 @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<BudgetDTO> getBudgetMonthlyAllConsumers() throws GeneralException {
List<Budget> budgetList = budgetService.getBudgetForAllConsumers();
List<BudgetDTO> 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<BudgetDTO> updateConsumerBudget(@RequestParam(value = "budgetPerDate", required = false)
ArrayList<BudgetPerConsumerDTO> budgetPerDate) throws GeneralException, ParseException {
List<BudgetItem> budgetItemList = new ArrayList<>();
List<Budget> 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<BudgetDTO> 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 확장 프로그램을 사용하고 있습니다. 요청은 다음과 같습니다.
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
}
]
}
해결법
-
==============================
1.의견에 언급 된 것을 바탕으로 가장 간단한 해결책은 다음과 같습니다.
의견에 언급 된 것을 바탕으로 가장 간단한 해결책은 다음과 같습니다.
@RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public Collection<BudgetDTO> updateConsumerBudget(@RequestBody SomeDto someDto) throws GeneralException, ParseException { //whatever } class SomeDto { private List<WhateverBudgerPerDateDTO> budgetPerDate; //getters setters }
이 솔루션은 생성중인 HTTP 요청에 실제로 있다고 가정합니다.
Content-Type : text / plain 대신 application / json
-
==============================
2.나에게 그것은 다른 참조 된 엔티티에서 @JsonBackReference없이 하나의 엔티티에 @JsonManagedReferece가 있음이 밝혀졌다. 이로 인해 마샬 러가 오류를 발생시킵니다.
나에게 그것은 다른 참조 된 엔티티에서 @JsonBackReference없이 하나의 엔티티에 @JsonManagedReferece가 있음이 밝혀졌다. 이로 인해 마샬 러가 오류를 발생시킵니다.
-
==============================
3.좋아, 문제의 원인은 직렬화 / 역 직렬화였다. 송수신되는 객체는 다음과 같습니다. 코드가 제출되고 code 및 maskedPhoneNumber가 반환됩니다.
좋아, 문제의 원인은 직렬화 / 역 직렬화였다. 송수신되는 객체는 다음과 같습니다. 코드가 제출되고 code 및 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; }
from https://stackoverflow.com/questions/24972437/error-org-springframework-web-httpmediatypenotsupportedexception-content-type by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 다중 arg 메소드를 이용한 스프링 빈 초기화 (0) | 2019.02.09 |
---|---|
[SPRING] Spring 빈 컨텍스트에서 객체의 배열 선언하기 (0) | 2019.02.09 |
[SPRING] j_spring_security_logout 호출이 작동하지 않습니다. (0) | 2019.02.09 |
[SPRING] Spring MVC 컨트롤러 메소드 매개 변수는 어떻게 작동하나요? (0) | 2019.02.09 |
[SPRING] Spring Boot에서 Yaml의 Map 키에서 도트를 이스케이프 처리 (0) | 2019.02.09 |