В настоящее время я изучаю Spring MVC, в частности @restController, и я столкнулся с проблема в том, что я не знаю, как с этим справиться. вот мой код
package com.kh.myapp.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.kh.myapp.member.service.MemberService;
import com.kh.myapp.member.vo.MemberVO;
@RestController
@RequestMapping("/hello")
public class RestfulController {
@Autowired
@Qualifier("memberServiceImplXML")
MemberService ms;
@RequestMapping("/hello")
public String hello() {
return "hello";
}
/*@RequestMapping(value = "/member", produces = "application/json")
public MemberVO member(@RequestParam("id") String id) {
MemberVO mv = new MemberVO();
mv = ms.getMemberByID(id);
return mv;
}*/
@RequestMapping(value = "/member/{id:.+}", method = RequestMethod.GET)
public MemberVO member(@PathVariable String id) {
MemberVO mv = new MemberVO();
mv = ms.getMemberByID(id);
return mv;
}
@RequestMapping(value = "/memberXML", method = RequestMethod.GET, produces = "application/json")
public MemberVO memberXML(HttpServletRequest request) {
String id = request.getParameter("id");
MemberVO mv = new MemberVO();
mv = ms.getMemberByID(id);
return mv;
}
@RequestMapping(value = "/memberList")
public List<MemberVO> memberList() {
List<MemberVO> list = ms.getMembers();
return list;
}
@RequestMapping("/memberMap")
public Map<Integer, MemberVO> memberMap(){
Map<Integer, MemberVO> map = new HashMap<>();
for(int i = 0; i < 10; i++) {
MemberVO mv = new MemberVO();
mv = ms.getMemberByID("admin" + i + "@kh.com");
map.put(i+1, mv);
}
return map;
}
}
кроме метода @pathVariable, все работает нормально. и если я добавлю '/' в конце параметра rex, он также будет работать нормально, но я слышал, что это опасная идея, потому что она не обслуживается. плюс, если я не использую переменную с точкой в качестве параметра rex (/ {id} вместо /{id:.+}), она также работает нормально. но я должен использовать здесь формат электронной почты!
я использую Spring 5.0.6 и наконец HTTP-ответ
Status Report
Description The target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request, and the server is unwilling to supply a default representation.
это заголовок, когда я выполняю его у почтальона
content-language →en
content-length →1175
content-type →text/html;charset=utf-8
date →Mon, 11 Jun 2018 09:00:04 GMT
извините за мой английский, я едва могу общаться. если у кого-то есть идея для этого, пожалуйста, помогите!
ОБНОВИТЬ
я настроил некоторые свойства в моем root-context.xml
<bean id = "contentNegotiationManager" class = "org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name = "favorPathExtension" value = "false"/>
<property name = "favorParameter" value = "true"/>
<property name = "mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
<bean id = "handlerMapping" class = "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name = "contentNegotiationManager" ref = "contentNegotiationManager"/>
<property name = "useSuffixPatternMatch" value = "false"/>
<property name = "alwaysUseFullPath" value = "true"></property>
</bean>
и теперь он вызывает 200 ok, если я добавляю .json или .xml в конец моей переменной regEx, но без данных ..
Посмотрите в разделе комментариев под ответом, как переопределить без использования regEx.
Я настроил некоторые свойства, и теперь он вызывает 200 ОК !! но без данных ... я переопределяю contentNegotiationManager и handlerMapping.




попробуйте определить переменную пути как:
@PathVariable("id") String id
вместо:
@PathVariable String id
В этой строке
@RequestMapping(value = "/member/{id:.+}", method = RequestMethod.GET)
public MemberVO member(@PathVariable String id) {
Заменить,
@RequestMapping(value = "/member/{id}", method = RequestMethod.GET)
public MemberVO member(@PathVariable(value = "id", required=true) String id) {
Спасибо за ваш комментарий. Я пробовал, но он все еще не работает, если я не добавляю конкретное имя расширения, такое как .json, .xml, но оно выдает 200 ok tho.
Возможный дубликат stackoverflow.com/a/3526973/1423818