第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何為帶請(qǐng)求參數(shù)和不帶請(qǐng)求參數(shù)的請(qǐng)求定義不同的 Spring MVC 請(qǐng)求處理程序?

如何為帶請(qǐng)求參數(shù)和不帶請(qǐng)求參數(shù)的請(qǐng)求定義不同的 Spring MVC 請(qǐng)求處理程序?

天涯盡頭無女友 2023-03-31 17:05:58
Spring MVC 有沒有辦法為沒有請(qǐng)求參數(shù)的請(qǐng)求和有請(qǐng)求參數(shù)的請(qǐng)求定義不同的處理程序?有一個(gè)簡(jiǎn)單的控制器:@RestController@RequestMapping("/strategies")public class StrategyController {    ...    @GetMapping    public List<Strategy> getAll() {        return service.getBeans().stream()            .map(mapper::toDto)            .collect(toList());    }    @GetMapping    public List<Strategy> search(StrategyFilter filter) {        return service.search(new StrategySearchSpecification(                filter.getCode(),                filter.getName(),                filter.getType()            )).stream()            .map(mapper::toDto)            .collect(toList());    }}我想要getAll()方法來處理沒有請(qǐng)求參數(shù)的請(qǐng)求: /strategies我想要search(StrategyFilter filter)方法來處理帶有請(qǐng)求參數(shù)的請(qǐng)求: /strategies?name=SomeName&type=SomeType似乎無法通過params屬性來區(qū)分這種情況,因?yàn)榭梢允÷訞GetMapping任何屬性。StrategyFilter在此配置中,我得到一個(gè)明顯的錯(cuò)誤:Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'strategyController' method public List<Strategy> StrategyController.getAll() to {[/strategies],methods=[GET]}: There is already 'strategyController' bean method public List<Strategy> StrategyController.search(StrategyFilter) mapped.當(dāng)然也可以這樣寫:@GetMappingpublic List<Strategy> get(StrategyFilter filter) {    return noFilterProvided(filter) ? getAll() : search(filter);}但是每次過濾器的屬性數(shù)量發(fā)生變化時(shí),都需要更改“noFilterProvided(StrategyFilter filter)”。
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

Spring 框架使用基于點(diǎn)的匹配。它從可用的匹配中選擇最高的匹配。通過標(biāo)準(zhǔn)越多的人得分越高。如果您在一個(gè)匹配中定義了請(qǐng)求的查詢參數(shù),那么當(dāng)參數(shù)存在時(shí)它將被接受。其他情況另說。


要定義請(qǐng)求的參數(shù),請(qǐng)將它們作為直接屬性傳遞,而不是作為 StrategyFilter 屬性傳遞。在缺少參數(shù)的情況下,這樣的實(shí)例初始化也成功(這些屬性不會(huì)被初始化,它們保持默認(rèn)狀態(tài):“”/0/false)。所以會(huì)出現(xiàn)模棱兩可的匹配錯(cuò)誤。


最后:使用直接屬性而不是 StrategyFilter。


您設(shè)計(jì)的其他問題是直接 StrategySearchSpecification 實(shí)例化。它不是以這種方式進(jìn)行單元測(cè)試的。將其定義為 Spring 組件。


@Component

@Getter // Lombok annotation to generate getter methods

@Setter // Lombok annotation to generate setter methods

public class StrategySearchSpecification

{

  private CODE_TYPE code;

  private String name;

  private TYPE_TYPE type;

}

并將其作為參數(shù)注入(正確的實(shí)現(xiàn)/模擬)并使用它的設(shè)置方法。


@RestController

@RequestMapping("/strategies")

public class StrategyController {

    ...


    @GetMapping

    public List<Strategy> getAll() {

        return service.getBeans().stream()

            .map(mapper::toDto)

            .collect(toList());

    }


    @GetMapping

    public List<Strategy> search(@RequestParam CODE_TYPE code, @RequestParam String name, @RequestParam TYPE_TYPE type, StrategySearchSpecification specification ) {

        specification.setCode( code );

        specification.setName( name );

        specification.setType( type );

        return service.search( specification

            )).stream()

            .map(mapper::toDto)

            .collect(toList());

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-03-31
?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊

如果StrategyFilter具有屬性nameand type,這應(yīng)該有效:


@RestController

@RequestMapping("/strategies")

public class StrategyController {

    ...


    @GetMapping

    public List<Strategy> getAll() {

        return service.getBeans().stream()

            .map(mapper::toDto)

            .collect(toList());

    }


    @GetMapping("{name}/{type}")

    public List<Strategy> search(StrategyFilter filter) {

        return service.search(new StrategySearchSpecification(

                filter.getCode(),

                filter.getName(),

                filter.getType()

            )).stream()

            .map(mapper::toDto)

            .collect(toList());

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-03-31
  • 2 回答
  • 0 關(guān)注
  • 144 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)